![](/img/trans.png)
[英]replace values in the row of one dataframe based on the values in columns of another dataframe pandas
[英]Pandas: replace values in one dataframe with values from another dataframe based on two columns
我有兩個數據幀:
d1 = {'id_': ['a','b','c','d'],
'year':['2018','2019','2017','2019']}
d2 = {'id_': ['a','c','e'],
'year':['2015',NaN,'2012']}
test1 = pd.DataFrame(d1)
test2 = pd.DataFrame(d2)
id_ year
0 a 2018
1 b 2019
2 c 2017
3 d 2019
id_ year
0 a 2015
1 c None
2 e 2012
我需要更換year
中值test1
有year
從值test2
,只有當id_
匹配。 如果值是NaN,我想保留舊值。
So the result looks like:
id_ year
0 a 2015
1 b 2019
2 c 2017
3 d 2019
我遇到的所有答案都是基於索引或使用字典將舊值映射到新值。 我將感謝你的幫助。
使用update
test1=test1.set_index('id_')
test1.update(test2.set_index('id_'))
test1.reset_index(inplace=True)
test1
Out[582]:
id_ year
0 a 2015
1 b 2019
2 c 2017
3 d 2019
我們在這里使用concat
和drop_duplicates
。
test3 = test2[test2['id_'].isin(test1['id_'])].dropna()
pd.concat([test1, test3]).drop_duplicates('id_', keep='last')
id_ year
1 b 2019
2 c 2017
3 d 2019
0 a 2015
這是一個基於merge
的替代方案。
test3 = test1.merge(test2, on='id_', how='left')
test3['year'] = test3.pop('year_y').fillna(test3.pop('year_x'))
test3
id_ year
0 a 2015
1 b 2019
2 c 2017
3 d 2019
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.