Pandas基于大多数相似的值合并数据框架

时间:2017-03-14 02:59:58

标签: python pandas join merge

我正在尝试合并2个pandas数据帧,但是,合并列中的值并不完全相同。

我正在使用该命令 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, ...


基本上,我要做的是获取第一组中的每个项目,并将其与第二组中最接近的元素相匹配。我已经使用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

我希望在这些元素之间进行配对,即使它们在大多数情况下并不完全相同。

2 个答案:

答案 0 :(得分:2)

您可以使用Pandas' merge_asof()

答案 1 :(得分:1)

首先在L_data中创建一个列,其中R_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