我有两个数据框:df1 和 df2。
df1
Index date | X1 | X2
0 01-01-2020 | H | 10
1 01-02-2020 | H | 30
2 01-03-2020 | Y | 15
3 01-04-2020 | Y | 20
Run Code Online (Sandbox Code Playgroud)
df2
Index | X1 | X2
0 | H | 5
1 | Y | 10
Run Code Online (Sandbox Code Playgroud)
当 X1 列上的值匹配时,我想将 df1 和 df2 相乘。
想要的结果:
Index date | X1 | X2
0 01-01-2020 | H | 50
1 01-02-2020 | H | 150
2 01-03-2020 | Y | 150
3 01-04-2020 | Y | 200
Run Code Online (Sandbox Code Playgroud)
使用Series.map通过比赛X1,然后由多个X2:
df1['X2'] *= df1['X1'].map(df2.set_index('X1')['X2'])
print (df1)
date X1 X2
0 01-01-2020 H 50
1 01-02-2020 H 150
2 01-03-2020 Y 150
3 01-04-2020 Y 200
Run Code Online (Sandbox Code Playgroud)
或DataFrame.merge与左连接一起使用:
df1['X2'] *= df2.merge(df1, on='X1', how='left')['X2_x']
print (df1)
date X1 X2
0 01-01-2020 H 50
1 01-02-2020 H 150
2 01-03-2020 Y 150
3 01-04-2020 Y 200
Run Code Online (Sandbox Code Playgroud)