Pandas 数据框 - 匹配两个数据框中的两列以更改第三列的值

我有两个数据框 df1 和 df2。df2 中的 x,y 值是 df1 中 x,y 值的子集。对于 df2 中的每个 x,y 行,我想将 df1 中 knn 列的值更改为 0,其中 df2[x] = df1[x] 和 df2[y] = df1[y]。在下面的示例中,x,y 值 (1,1) 和 (1,2) 很常见,因此 df1 中的 knn 列将更改为 [0,0,0,0]。下面代码中的最后一行不起作用。我将不胜感激任何指导。


import pandas as pd


df1_dict = {'x': ['1','1','1','1'],

        'y': [1,2,3,4],

        'knn': [1,1,0,0]

        }


df2_dict = {'x': ['1','1'],

        'y': [1,2]

        }


df1 = pd.DataFrame(df1_dict, columns = ['x', 'y','knn'])

df2 = pd.DataFrame(df2_dict, columns = ['x', 'y'])

df1['knn']= np.where((df1['x']==df2['x']) and df1['y']==df2['y'], 0)


冉冉说
浏览 113回答 2
2回答

慕田峪7331174

您可以在这里使用merge:u = df1.merge(df2,on=['x','y'],how='left',indicator=True)u = (u.assign(knn=np.where(u['_merge'].eq("both"),0,u['knn']))     .reindex(columns=df1.columns))print(u)   x  y  knn0  1  1    01  1  2    02  1  3    03  1  4    0

皈依舞

您可以使用MultiIndex.isin:c = ['x', 'y']df1.loc[df1.set_index(c).index.isin(df2.set_index(c).index), 'knn'] = 0   x  y  knn0  1  1    01  1  2    02  1  3    03  1  4    0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python