Pandas基于分组字段应用价值

问题描述 投票:0回答:1

我有一个数据框,看起来像。

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 valuetime 然后JOIN回原来的数据帧,在 time但这是SQLRDBMS式的思维,我想知道是否有更有效的方法通过Python来实现?

例如,在T-SQL中,我会把它写为 SUM(value) OVER (PARTITION BY time)

python pandas greatest-n-per-group
1个回答
1
投票

我不知道具体的选择逻辑是什么,但这里有一个例子,只是取每次的第一个值,然后进行传播。你也可以做这样的事情 .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,只要把里面的调用替换成: .mapdf.groupby("time")['value'].sum()

© www.soinside.com 2019 - 2024. All rights reserved.