[英]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.