Pandas Python Groupby累积和反转

2024-04-19 06:56:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了Pandas groupby cumulative sum并发现它非常有用。但是,我想确定如何计算反向累计和。在

该链接建议如下。在

df.groupby(by=['name','day']).sum().groupby(level=[0]).cumsum()

为了反向求和,我尝试对数据进行切片,但失败了。在

^{pr2}$

编辑: 根据反馈,我试图实现代码并使数据帧变大:

import pandas as pd
df = pd.DataFrame(
    {'name': ['Jack', 'Jack', 'Jack', 'Jill', 'Jill'],
     'surname' : ['Jones','Jones','Jones','Smith','Smith'],
     'car' : ['VW','Mazda','VW','Merc','Merc'],
     'country' : ['UK','US','UK','EU','EU'],
     'year' : [1980,1980,1980,1980,1980],
     'day': ['Monday', 'Tuesday','Wednesday','Monday','Wednesday'],
     'date': ['2016-02-31','2016-01-31','2016-01-31','2016-01-31','2016-01-31'],
     'no': [10,30,50,40,40],
     'qty' : [100,500,200,433,222]})

然后我尝试对多个列进行分组,但未能应用分组。在

df = df.groupby(by=['name','surname','car','country','year','day','date']).sum().iloc[::-1].groupby(level=[0]).cumsum().iloc[::-1].reset_index()

为什么会这样?我预计马自达的杰克·琼斯和大众的杰克·琼斯是一个单独的累计数量。在


Tags: 数据namedfbysurnamelevelpdsmith
1条回答
网友
1楼 · 发布于 2024-04-19 06:56:00

您可以使用双^{}

df = df.groupby(by=['name','day']).sum().iloc[::-1].groupby(level=[0]).cumsum().iloc[::-1]
print (df)
                no
name day          
Jack Monday     90
     Tuesday    80
     Wednesday  50
Jill Monday     80
     Wednesday  40

另一个列的解决方案是简化:

^{pr2}$

编辑:

第二个groupby中存在问题,需要添加更多级别-level=[0,1,2]表示按第一个name、第二个surname和第三个car级别分组。在

^{3}$

或者可以按名称选择-请参见groupby enhancements in 0.20.1+

df2 = (df.groupby(by=['name','surname','car','country','year','day','date'])
        .sum()
        .iloc[::-1]
        .groupby(['name','surname','car'])
        .cumsum()
        .iloc[::-1]
        .reset_index())
print (df2)

   name surname    car country  year        day        date  no  qty
0  Jack   Jones  Mazda      US  1980    Tuesday  2016-01-31  30  500
1  Jack   Jones     VW      UK  1980     Monday  2016-02-31  60  300
2  Jack   Jones     VW      UK  1980  Wednesday  2016-01-31  50  200
3  Jill   Smith   Merc      EU  1980     Monday  2016-01-31  80  655
4  Jill   Smith   Merc      EU  1980  Wednesday  2016-01-31  40  222

相关问题 更多 >