Pandas根据其他df

时间:2018-05-05 16:50:29

标签: python pandas dataframe join

DF1:

         GAME  PLAY  BET
0  (SWE, FIN)  DRAW   10
1  (DEN, GER)   WIN   20
2  (RUS, CZE)  LOSS   30

DF2:

     GAME   WIN  DRAW   LOSS
0  (SWE, FIN)  1.50   2.0   3.25
1  (DEN, GER)  2.00   2.5   2.10
2  (RUS, CZE)  1.05   2.1  10.00

我想在df1中为每个游戏创建一个“PAYOFF”列。通过将该值与df1中的“BET”相乘,从df2获取实际赔率(WIN / DRAW / LOSS)来计算收益。例如,对于第1行(SWE,FIN),PLAY是一个DRAW,我需要使用该值从df2中的DRAW col获取。
我可以通过加入2个df来管理它,然后在一些步骤中对列进行一些丑陋的del / rename,但我肯定错过了一些更优雅的方法来做到这一点? TIA, - 汤米

2 个答案:

答案 0 :(得分:2)

我认为需要lookup

df1['New']=df2.set_index('GAME').lookup(df1.GAME,df1.PLAY)
df1
Out[26]: 
        GAME  PLAY  BET   New
0  (SWE,FIN)  DRAW   10   2.0
1  (DEN,GER)   WIN   20   2.0
2  (RUS,CZE)  LOSS   30  10.0

答案 1 :(得分:2)

我更喜欢Wen的解决方案,但你可以使用

merged = pd.merge(
    pd.concat([df1, pd.get_dummies(df1.PLAY)], axis=1),
    df2,
    on='GAME')
>>> merged.BET * (merged.DRAW_x * merged.DRAW_y + merged.WIN_x * merged.WIN_y + merged.LOSS_x * merged.LOSS_y)
0     20.0
1     40.0
2    300.0
dtype: float64