Панды выбирают значение в одном кадре данных, основываясь на значении в другом df - PullRequest
0 голосов
/ 05 мая 2018

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

Я бы хотел создать столбец "PAYOFF" в df1 для каждой игры. Выплата рассчитывается путем извлечения фактических шансов (WIN / DRAW / LOSS) из df2 путем умножения этого значения на «СТАВКУ» из df1. Например, для строки 1 (SWE, FIN) PLAY был DRAW, и мне нужно использовать это значение для извлечения из столбца DRAW в df2.
Я могу справиться с этим, присоединив 2 df, а затем несколько уродливых столбцов del / rename в несколько этапов, но наверняка мне не хватает более элегантного способа сделать это? TIA, --Tommy

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Мне больше нравится решение Вена, но вы можете использовать

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
0 голосов
/ 05 мая 2018

думаю нужно 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...