繁体   English   中英

如何将 dataframe 中的每一行与另一个 dataframe 中的每一行进行比较,并查看值之间的差异?

[英]How can I compare each row from a dataframe against every row from another dataframe and see the difference between values?

我有两个数据框:

df1

     Code     Number
0   ABC123      1
1   DEF456      2
2   GHI789      3
3   DEA456      4

df2

     Code 
0   ABD123
1   DEA458
2   GHI789

df1 就像一本字典,我可以通过检查它们的代码从中获取每个项目的相应编号。 但是,有未注册的代码,如果我找到未注册的代码,我应该寻找看起来最像它们的代码。 所以,结果应该是:

ABD123 = 1(因为它与 ABC123 有 1 个不同的字符)

DEA456 = 4(因为它有1个与DEA456不同的字符,2个来自DEF456,所以它选择最接近的一个)

GHI789 = 3(因为它在 df1 有等价物)

我知道如何分别检查每个代码的差异并保存不同字符的“长度”,但我不知道如何应用此代码,因为我不知道如何将 df2 中的每一行与所有行进行比较来自df1。 有办法吗?

不知道如何将 df2 中的每一行与 df1 中的所有行进行比较。

嵌套循环将起作用。 如果你有一个名为compare的 function,它看起来像这样......

for index2, row2 in df2.iterrows():
    for index1, row1 in df1.iterrows():
        difference = compare(row2,row1)
        #do something with the difference.

使用 Pandas 或 Numpy 时,嵌套循环通常并不理想,但它们确实有效。 可能有更好的解决方案。


DataFrame.iterrows()

这也应该有效:

df['Code_e'] = df['Code'].str.extract(r'(\d+)').astype(int)
df2['Code_e'] = df2['Code'].str.extract(r'(\d+)').astype(int)
final_df = pd.merge_asof(df2,df.sort_values(by='Code_e'),on='Code_e',suffixes=('','_right')).drop(['Code_e','Code_right'],axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM