在group()的熊猫中使用cumsum

发布于 2021-01-29 15:13:03

来自熊猫的新手:我的数据基本上看起来像这样-

 data1=pd.DataFrame({'Dir':['E','E','W','W','E','W','W','E'], 'Bool':['Y','N','Y','N','Y','N','Y','N'], 'Data':[4,5,6,7,8,9,10,11]}, index=pd.DatetimeIndex(['12/30/2000','12/30/2000','12/30/2000','1/2/2001','1/3/2001','1/3/2001','12/30/2000','12/30/2000']))
data1
Out[1]: 
           Bool  Data Dir
2000-12-30    Y     4   E
2000-12-30    N     5   E
2000-12-30    Y     6   W
2001-01-02    N     7   W
2001-01-03    Y     8   E
2001-01-03    N     9   W
2000-12-30    Y    10   W
2000-12-30    N    11   E

我想将其分为多个级别,然后执行cumsum():

例如,像running_sum=data1.groupby(['Bool','Dir']).cumsum()<-(不起作用)

输出看起来像:

Bool Dir Date        running_sum
N    E   2000-12-30           16
     W   2001-01-02            7
         2001-01-03           16
Y    E   2000-12-30            4
         2001-01-03           12
     W   2000-12-30           16

我的“喜欢”代码显然还没有接近。我做了很多尝试,并且学到了很多有关如何不这样做的新知识。

谢谢你提供的所有帮助。

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尝试这个:

    data2 = data1.reset_index()
    data3 = data2.set_index(["Bool", "Dir", "index"])   # index is the new column created by reset_index
    running_sum = data3.groupby(level=[0,1,2]).sum().groupby(level=[0,1]).cumsum()
    

    您不能简单地使用cumsumon的原因data3与数据的结构有关。通过分组BoolDir
    和应用聚合函数(summean,等),比一开始,因为任何功能,您使用基于您的按键组将汇总值会产生更小尺寸的数据帧。但是,cumsum它不是一个整合功能。它会返回一个与被调用的相同大小的DataFrame。因此,除非您输入的DataFrame格式为调用后输出可以具有相同大小的格式cumsum,否则它将引发错误。这就是为什么我sum首先调用它的原因,它以正确的输入格式返回DataFrame。

    对不起,如果我还没有解释清楚。也许有人可以帮助我吗?



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看