[英]update pandas dataframe column with value from another dataframe with condition
[英]pandas column value update from another dataframe value
我有以下2个数据框
df_a =
id val
0 A100 11
1 A101 12
2 A102 13
3 A103 14
4 A104 15
df_b =
id loc val
0 A100 12
1 A100 23
2 A100 32
3 A102 21
4 A102 38
5 A102 12
6 A102 18
7 A102 19
.....
预期结果:
df_b =
id loc val
0 A100 12 11
1 A100 23 11
2 A100 32 11
3 A102 21 12
4 A102 38 12
5 A102 12 12
6 A102 18 12
7 A102 19 12
.....
当我尝试通过df_a的“ val”列更新df_b的“ val”列时,
for index, row in df_a.iterrows():
v = row['val']
seq = df_a.loc[df_a['val'] == v]
df_b.loc[df_b['val'] == v, 'val'] = seq['val']
要么
df_x = df_b.join(df_a, on=['id'], how='inner', lsuffix='_left', rsuffix='_right')
但是我无法解决这个问题...我该如何解决这个棘手的问题?
谢谢
您可以使用map
通过Series
通过创建set_index
:
df_b['val'] = df_b['id'].map(df_a.set_index('id')['val'])
print (df_b)
id loc val
0 A100 12 11
1 A100 23 11
2 A100 32 11
3 A102 21 13
4 A102 38 13
5 A102 12 13
6 A102 18 13
7 A102 19 13
或与left join
merge
:
df = pd.merge(df_b,df_a, on='id', how='left')
print (df)
id loc val
0 A100 12 11
1 A100 23 11
2 A100 32 11
3 A102 21 13
4 A102 38 13
5 A102 12 13
6 A102 18 13
7 A102 19 13
如果只有一个公共列id
可以用于两个df
连接,那么是不可能的。
df = pd.merge(df_b,df_a, how='left')
print (df)
id loc val
0 A100 12 11
1 A100 23 11
2 A100 32 11
3 A102 21 13
4 A102 38 13
5 A102 12 13
6 A102 18 13
7 A102 19 13
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.