gpt4 book ai didi

python - 在 group() 的 Pandas 中使用 cumsum

转载 作者:太空狗 更新时间:2023-10-29 17:42:25 27 4
gpt4 key购买 nike

来自 Pandas 新手:我的数据基本上是这样的 -

 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()

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

抱歉,如果我解释得不够好。也许其他人可以帮助我?

关于python - 在 group() 的 Pandas 中使用 cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15755057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com