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

2024-09-30 04:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧:

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中的所有行进行比较。有办法吗


Tags: 数据项目代码number字典code字符df1
2条回答

这也应该起作用:

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)

don't know how to compare each row from df2 against all rows from df1.

嵌套循环将起作用。如果您有一个名为compare的函数,它将如下所示

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()

相关问题 更多 >

    热门问题