簡體   English   中英

Pandas 數據框 - 匹配兩個數據框中的兩列以更改第三列的值

[英]Pandas dataframes - Match two columns in the two dataframes to change the value of a third column

我有兩個數據框 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)

您可以在此處使用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  knn
0  1  1    0
1  1  2    0
2  1  3    0
3  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  knn
0  1  1    0
1  1  2    0
2  1  3    0
3  1  4    0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM