根据 pandas 数据框另一列中的条件对列元素求和

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

我有一组包含 3 列的数据 - 线、止损点和值。我想按公共线路和停靠点出现的顺序对它们的值进行求和。

这是我拥有的数据集:

raw data

这就是我想从这个原始数据集创建的内容:

desired summary data

我尝试通过创建数据透视表并使用 aggfunc 对值求和来做到这一点。

rail_pivot = pd.pivot_table(rail_d, index=['Line', 'Stop'], aggfunc= {'Value': 'sum'})

但它汇总了常见止损点的所有值,而不是按常见止损点出现的顺序。见下文

Output using pivot table

python pandas pivot-table
1个回答
0
投票

代码

cond = df.groupby('Line')['Stop'].shift().ne(df['Stop'])
grp = cond.groupby(df['Line']).cumsum()

out = (df
       .groupby(['Line', grp]).agg({'Stop': 'first', 'Value': 'sum'})
       .droplevel(1)
       .reset_index()
)

 Line Stop  Value
0   A1    A     12
1   A1    B      4
2   A1    A      1
3   B1    A     11
4   B1    B      2
5   B1    A      3
© www.soinside.com 2019 - 2024. All rights reserved.