【发布时间】:2021-04-14 20:55:48
【问题描述】:
如果我有两个不同长度、不同标签和不同数字精度级别的数据框,如下所示:
df1 = pd.DataFrame({'a':np.array([1.2345,2.2345,3.2345]),'b':np.array([4.123,5.123,6.123])})
df2 = pd.DataFrame({'A':np.array([1.2346,2.2343]),'B':np.array([4.1232,5.1239])})
如何找到两个数据帧在“a”和“A”列之间具有近似匹配值的行(例如在 2 位精度内),从而产生这样的数据帧
a b A B
------------------------------------------------
| 1.2345 | 4.123 | 1.2346 | 4.1232 |
| 2.2345 | 5.123 | 2.2343 | 5.1239 |
尝试:
尝试 #1:
matches_df = pd.merge(df1, df2, how='inner', left_on=['a'], right_on = ['A'])
这仅在“a”和“A”列之间存在完全匹配时才有效,但我不确定如何合并一个 fudge 因子以允许匹配精度在 2 位以内的行。
尝试 #2
matches_df = df1.loc[np.round(df1['a'],2)==np.round(df2['A'],2)]
这给出了错误“ValueError: Can only compare same-labeled Series objects”,因为 我认为这两个数据框有不同的标签('a'、'b' 和 'A'、'B ')。
关于如何实现这一点的任何想法?
【问题讨论】:
-
感谢您向我展示该链接,不幸的是 pd.merge 方法似乎无法以我想要的方式为我工作。
标签: python pandas dataframe matching