在group()的熊猫中使用cumsum
来自熊猫的新手:我的数据基本上看起来像这样-
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
我的“喜欢”代码显然还没有接近。我做了很多尝试,并且学到了很多有关如何不这样做的新知识。
谢谢你提供的所有帮助。
-
尝试这个:
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()
您不能简单地使用
cumsum
on的原因data3
与数据的结构有关。通过分组Bool
和Dir
和应用聚合函数(sum
,mean
,等),比一开始,因为任何功能,您使用基于您的按键组将汇总值会产生更小尺寸的数据帧。但是,cumsum
它不是一个整合功能。它会返回一个与被调用的相同大小的DataFrame。因此,除非您输入的DataFrame格式为调用后输出可以具有相同大小的格式cumsum
,否则它将引发错误。这就是为什么我sum
首先调用它的原因,它以正确的输入格式返回DataFrame。对不起,如果我还没有解释清楚。也许有人可以帮助我吗?