簡體   English   中英

Pandas 基於分組字段應用值

[英]Pandas Apply Values Based On Grouping Field

我有一個看起來像這樣的數據框:

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

預期的 output 將是:

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

我現在處理它的方法是按time創建一個具有 MAX value的分組數據框,然后time加入原始數據框,但這是 SQL/RDBMS 類型的思維,我想知道是否有通過 Python 更有效的方法來做到這一點?

例如,在 T-SQL 中,我會將其寫為SUM(value) OVER (PARTITION BY time)

我不確定選擇邏輯到底是什么,但這里有一個例子,它每次只取第一個值並傳播它。 如果您想要最大值,也可以執行類似.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

編輯:對於總和,只需用df.groupby("time")['value'].sum()替換對.map的調用內部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM