我有两个数据帧df1和df2。
df1:
id val
1 25
2 40
3 78
df2:
id val
2 8
1 5
现在我想用df1['val'] = df1['val']/df2['val']
来匹配id
。我可以通过迭代所有df2
行来做到这一点,因为df2
是df1
的子集,所以它可能缺少一些值,我想保持不变。这是我现在的文件:
for row in df2.iterrows():
df1.loc[df1['id']==row[1]['id'], 'val'] /= row[1]['val']
df1:
id val
1 5
2 5
3 78
如何在不使用for循环来提高速度的情况下实现相同的目标?
使用Series.map
与Series.div
:
df1['val'] = df1['val'].div(df1['id'].map(df2.set_index('id')['val']), fill_value=1)
print (df1)
id val
0 1 5.0
1 2 5.0
2 3 78.0
左连接merge
的解:
df1['val'] = df1['val'].div(df1.merge(df2, on='id', how='left')['val_y'], fill_value=1)
print (df1)
id val
0 1 5.0
1 2 5.0
2 3 78.0