[英]Replacing value in a column in pandas dataframe from a column value in another dataframe
我有兩個數據幀df1
和df2
s = {'id': [4735,46,2345,8768,807],'city': ['a', 'b', 'd', 'e', 'f']}
s1 = {'id': [4735],'city_in_mail': ['x']}
df1 = pd.DataFrame(s)
df2 = pd.DataFrame(s1)
df1
看起來像
id city
0 4735 a
1 46 b
2 2345 d
3 8768 e
4 807 f
和df2
看起來像:
id city_in_mail
0 4735 x
我想將數據幀df1
中列city
的值從數據幀df2
的列city_in_mail
的值city_in_mail
為id
值相同的行。
所以我的df1應該成為:
id city
0 4735 x
1 46 b
2 2345 d
3 8768 e
4 807 f
大熊貓怎么做?
使用與.loc
merge
s=df1.merge(df2,how='outer')
s.loc[s.city_in_mail.notnull(),'city']=s.city_in_mail
s
city id city_in_mail
0 x 4735 x
1 b 46 NaN
2 d 2345 NaN
3 e 8768 NaN
4 f 807 NaN
嘗試使用combine_first
rename
以對齊列索引:
df2.set_index('id')\
.rename(columns={'city_in_mail':'city'})\
.combine_first(df1.set_index('id'))\
.reset_index()
輸出:
id city
0 4735.0 x
1 46.0 b
2 2345.0 d
3 8768.0 e
4 807.0 f
注意:如果您願意,可以將其重新分配給df1。
另外.map
+ .fillna
(如果'id'
是df2
的唯一鍵)
df1['city'] = df1.id.map(df2.set_index('id').city_in_mail).fillna(df1.city)
print(df1)
# id city
#0 4735 x
#1 46 b
#2 2345 d
#3 8768 e
#4 807 f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.