pandas - 将多列上的数据框连接到一列公差?
问题描述
嗨,在多列上将两个数据帧连接在一起的有效方法是什么,除了选择数字(在这种情况下为一个)之外的所有数据都不是完全匹配的?
编辑:根据 Ben 的建议,['A', 'B', 'D',] 构成 df1 和 df2 的唯一 ID,df1 上的连接应该是唯一的,并且 df1.shape != df2.shape。
IE:
df1
A B C D
1 Apple 21 10 a
2 Pear 90 12 a
3 Apple 31 11 b
4 Apple 71 14 c
5 Apple 45 15 d
6 Pear 14 13 b
df2
A B E D
1 Apple 22 50 a
2 Pear 89 46 a
3 Apple 30 56 b
4 Apple 72 60 c
加入 ['A', 'B', 'D',] 其中 B 具有容差和 +/- 1。导致
A B C D E
1 Apple 21 10 a 50
2 Pear 90 12 a 46
3 Apple 31 11 b 56
4 Apple 71 14 c 60
5 Apple 45 15 d NaN
6 Pear 14 13 b NaN
解决方案
与merge_asof
_tolerance
pd.merge_asof(df1.sort_values('B'),df2.sort_values('B'),by=['A','D'],on='B',tolerance=1,direction='nearest')
Out[306]:
A B C D E
0 Pear 14 13 b NaN
1 Apple 21 10 a 50.0
2 Apple 31 11 b 56.0
3 Apple 45 15 d NaN
4 Apple 71 14 c 60.0
5 Pear 90 12 a 46.0