gpt4 book ai didi

python - 比较两个数据框并根据掩码值向数据框添加新列

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:14 25 4
gpt4 key购买 nike

我正在比较两个基于 ID 的数据框,然后使用以下代码合并它们:

        df = df1.merge(df2, on=id, suffixes=('_x','_y'))    

df1

        name  age  id  salary  
0 Smith 30 2 2000
1 Ron 24 3 30000
2 Mike 35 4 40000
3 Jack 21 5 5000
4 Roshan 20 6 60000
5 Steve 45 8 8000
6 Peter 28 1 1000

df2

       name  age  salary  id  
0 Peter 32 10000 1
1 Smith 30 1500 2
2 Ron 24 7000 3
3 Mike 35 20000 4
4 Jack 21 5000 5
5 Cathy 20 9000 6
6 Steve 45 56000 8

对/对

            name_x  age_x  id  salary_x name_y  age_y  salary_y  
0 Smith 30 2 2000 Smith 30 1500
1 Ron 24 3 30000 Ron 24 7000
2 Mike 35 4 40000 Mike 35 20000
3 Jack 21 5 5000 Jack 21 5000
4 Roshan 20 6 60000 Cathy 20 9000
5 Steve 45 8 8000 Steve 45 56000
6 Peter 28 1 1000 Peter 32 10000

现在根据输出,我正在比较 _x 和 _y 列值并将其放入掩码中:

        mask = df[cols + '_x'].values == df[cols + '_y'].values    
print(mask)

掩饰 o/p

    [[ True  True False]  
[ True True False]
[ True True False]
[ True True True]
[ True False False]
[ True True False]
[False True False]]

基于这个掩码值,我想设置一个条件,如果 false 出现在假设掩码 [1] 中,它应该给我“No MAtch”的累积结果,我可以将其附加到我的输出结果中,例如:

        name_x  age_x  id  salary_x name_y  age_y  salary_y  new_column  
0 Smith 30 2 2000 Smith 30 1500 No Match
1 Ron 24 3 30000 Ron 24 7000 No Match
2 Mike 35 4 40000 Mike 35 20000 No Match
3 Jack 21 5 5000 Jack 21 5000 MAtch
4 Roshan 20 6 60000 Cathy 20 9000 No Match
5 Steve 45 8 8000 Steve 45 56000 No Match
6 Peter 28 1 1000 Peter 32 10000 No Match

最佳答案

使用numpy.wherenumpy.all对于快速矢量化解决方案:

mask = df[cols + '_x'].values == df[cols + '_y'].values  

df['new_column'] = np.where(np.all(mask, axis=1) , 'Match','No Match')
print (df)
name_x age_x id salary_x name_y age_y salary_y new_column
0 Smith 30 2 2000 Smith 30 1500 No Match
1 Ron 24 3 30000 Ron 24 7000 No Match
2 Mike 35 4 40000 Mike 35 20000 No Match
3 Jack 21 5 5000 Jack 21 5000 Match
4 Roshan 20 6 60000 Cathy 20 9000 No Match
5 Steve 45 8 8000 Steve 45 56000 No Match
6 Peter 28 1 1000 Peter 32 10000 No Match

感谢 @markuscosinus 的评论,如果需要通过索引选择掩码的第二个 “列” 进行比较 - 这里是 mask[:, 1]:

df['new_column'] = np.where(mask[:, 1] , 'Match','No Match')

关于python - 比较两个数据框并根据掩码值向数据框添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54805145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com