Pandas Применить значения на основе поля группировки - PullRequest
0 голосов
/ 03 мая 2020

У меня есть фрейм данных, который выглядит следующим образом:

time    action    value
10:00   FG2       2
10:00   Assist    0
09:45   Turnover  -1
09:45   Steal     0
09:30   FG3       3
09:20   Miss      0

Как можно суммировать столбец значений за time и применять его к другим строкам, которые имеют одинаковое значение time? В этом примере value для второй строки будет равно 2, поскольку он разделяет тот же time, что и строка первая.

Ожидаемый результат будет:

10:00   FG2          2
10:00   Assist       2
09:45   Turnover     -1
09:45   Steal        -1
09:30   FG3          3
09:20   Miss         0

Путь Я бы подошел к этому сейчас: создать сгруппированный фрейм данных с MAX value на time и затем вернуться к исходному фрейму данных на time, но это мышление типа SQL / RDBMS, и я интересно, есть ли более эффективный способ сделать это через Python?

Например, в T- SQL я бы написал это как SUM(value) OVER (PARTITION BY time)

1 Ответ

1 голос
/ 03 мая 2020

Я не совсем уверен, что такое логика выбора c, но вот пример, который просто принимает первое значение каждый раз и распространяет его. Вы также можете сделать что-то вроде .max(), если хотите получить наибольшее значение:

In [12]: df
Out[12]:
    time    action  value
0  10:00       FG2      2
1  10:00    Assist      0
2  09:45  Turnover     -1
3  09:45     Steal      0
4  09:30       FG3      3
5  09:20      Miss      0

In [13]: df['value'] = df['time'].map(df.groupby("time")['value'].first())

In [14]: df
Out[14]:
    time    action  value
0  10:00       FG2      2
1  10:00    Assist      2
2  09:45  Turnover     -1
3  09:45     Steal     -1
4  09:30       FG3      3
5  09:20      Miss      0

РЕДАКТИРОВАТЬ: Для суммы просто замените внутреннюю часть вызова на .map на df.groupby("time")['value'].sum()

...