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, - 汤米
答案 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