亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

冉冉說 2023-09-26 14:29:00
我有兩個數據框 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 pddf1_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)
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

您可以在這里使用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


查看完整回答
反對 回復 2023-09-26
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您可以使用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


查看完整回答
反對 回復 2023-09-26
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號