我有一个数据框,看起来像。
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
如何能把每一列的值SUM起来 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
然后JOIN回原来的数据帧,在 time
但这是SQLRDBMS式的思维,我想知道是否有更有效的方法通过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
EDIT: 对于sum,只要把里面的调用替换成: .map
与 df.groupby("time")['value'].sum()