我有兩個不同大小的資料框架。第一個資料框架(df1)有4個列,但是其中兩個列的名稱與第二個資料框架(df2)中的列相同,后者只由2個列組成。共同的列是['ID']和['Department']。
我想檢查df2中的任何ID是否在df1中。如果有,我想用df2['Department']的值替換df1['Department']的值。
例如,df1看起來像這樣:
ID Department Yrs Experience Education
1234 科學 1 學士
2356 藝術 3 學士
2456數學 2碩士
4657 科學 4 碩士
而df2看起來是這樣的:
ID Department
1098P.E.
1234 技術部
2356 歷史系
我想檢查來自df2的ID是否在df1中,如果是,就更新Department。輸出的結果應該是這樣的:
ID Department Yrs Experience Education
1234 **技術** 1 本科生
2356 **歷史** 3 學士學位
2456數學 2碩士
4657 科學 4 碩士
對df1的預期更新以黑體字顯示
有什么有效的方法可以做到這一點嗎?
感謝您抽出時間閱讀此文并提供幫助。
uj5u.com熱心網友回復:
你可以使用df1的ID與Pandas系列進行映射,該系列是通過在df2上設定ID作為索引,并從df2中獲取Department列形成的(這充當了映射表)。
然后,在df2的ID不匹配的情況下,我們從df1填入Department的原始值(在不匹配的情況下保留原始值):
df1['Department'] = (df1['ID']. map(df2.set_index('ID')['Department'])
.fillna(df1['Department'])
)
結果:
print(df1)
ID 部門 年份 經驗 教育
0 1234 技術 1 學士
1 2356 歷史 3 學士學位
2 2456數學 2 碩士
3 4657 科學 4 碩士學位
uj5u.com熱心網友回復:
嘗試:
df1["Department"].update(
df1[["ID"]].merge(df2, on="ID", how="left") ["Department"]
)
print(df1)
列印:
ID Department Yrs Experience Education
0 1234 技術 1 學士
1 2356 歷史 3 學士
2 2456 數學 2 碩士
3 4657 科學 4 碩士
uj5u.com熱心網友回復:
df_1 = pd. DataFrame(data={'ID': [1234, 2356, 2456, 4657], 'Department': ['科學'/span>, '藝術'/span>, '數學'/span>, '科學'/span>]})
df_2 = pd. DataFrame(data={'ID'/span>:[1234, 2356], 'Department'/span>: ['技術', '歷史]})
df_1.loc[df_1['ID'].isin(df_2['ID']), '部門'] = df_2['部門']
OutPut
ID Department
0 1234 Technology
1 2356 History
2 2456數學
3 4657 科學
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307674.html
標籤:
