在另一列上乘以两个数据框条件

use*_*443 6 dataframe pandas

我有两个数据框: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)

jez*_*ael 5

使用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)