2017-03-14 3 views
0

2 개의 팬더 데이터 프레임을 병합하려고했지만 병합 열의 값이 정확히 일치하지 않습니다.가장 유사한 값을 기반으로 한 팬더 병합 데이터 그램

내가 pd.merge(D_data, L_data,on="R_Time") 그러나 명령을 사용하고, D_data 내 R_time 열은

4.316667, 4.320834, 4.325000
처럼 내 데이터가 보이는 내 L_data 열에서 보이는 같은 :

4.31000, 4.32000, ...


본질적으로, 내가하려는 것은 첫 번째 세트의 모든 항목을 가져 와서 가장 가까운 e와 일치시키는 것입니다. 두 번째 세트에서. Excel에서 vlookup 함수를 사용하여이 작업을 수행했지만 Pandas Dataframe 객체에서 동일한 기능을 수행하는 방법을 완전히 알지 못합니다.

주어진 데이터 :

D_data:
4.316667
4.320834 4.325 4.329167 4.333334 4.3375 4.341667 4.345834 4.35 4.354167 4.358334

L_Data 4.316667 4.318667 4.320667 4.322667 4.324667 4.326667 4.328667 4.330667 4.332667 4.334667 4.336667

가 나는 그들이 대부분의 경우 정확히 동일하지 않더라도, 바로 이러한 요소들 사이의 페어링을 생산합니다. 가장 가까운 곳 (작은 절대 차이의 인덱스) 다음 병합입니다

+0

당신이 우리에게 데이터를 제공 할 수 함께 일할 것인가? 입력과 예상 출력 모두? –

+0

예를 추가했습니다. – Jim

답변

0

먼저 R_data의 값으로 L_data의 열을 만듭니다

import pandas as pd 
D_data =pd.DataFrame({"R_Time":[4.316667,4.320834,4.325,4.329167,4.333334,4.3375,4.341667,4.345834,4.35,4.354167,4.358334]}) 
L_data =pd.DataFrame({"_R_Time":[4.316667,4.318667,4.320667,4.322667,4.324667,4.326667,4.328667,4.330667,4.332667,4.334667,4.336667]}) 

L_data["R_Time"]=L_data.apply(lambda x:D_data["R_Time"][abs(D_data["R_Time"]-x["_R_Time"]).idxmin()],axis=1) 
pd.merge(D_data, L_data,on="R_Time") 

결과 :

 R_Time _R_Time 
0 4.316667 4.316667 
1 4.316667 4.318667 
2 4.320834 4.320667 
3 4.320834 4.322667 
4 4.325000 4.324667 
5 4.325000 4.326667 
6 4.329167 4.328667 
7 4.329167 4.330667 
8 4.333334 4.332667 
9 4.333334 4.334667 
10 4.337500 4.336667 
관련 문제