gpt4 book ai didi

python - Pandas - 在分组溢出后将滚动总和转移到以下组

转载 作者:行者123 更新时间:2023-12-04 08:40:28 24 4
gpt4 key购买 nike

我可能做错了什么,但我试图在对数据框进行分组后计算滚动平均值(为了简单起见,在本示例中我们使用 sum 代替)。直到这里一切正常,但是当我应用转变时,我发现这些值会溢出到下面的组中。请参阅下面的示例:

import pandas as pd

df = pd.DataFrame({'X': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'Y': [1, 2, 3, 1, 2, 3, 1, 2, 3]})

grouped_df = df.groupby(by='X')['Y'].rolling(window=2, min_periods=2).sum().shift(periods=1)
print(grouped_df)
预期结果:
X   
A 0 NaN
1 NaN
2 3.0
B 3 NaN
4 NaN
5 3.0
C 6 NaN
7 NaN
8 3.0
我实际得到的结果:
X   
A 0 NaN
1 NaN
2 3.0
B 3 5.0
4 NaN
5 3.0
C 6 5.0
7 NaN
8 3.0
您可以看到 A2 的结果传递给 B3,B5 的结果传递给 C6。我不确定这是预期的行为,我做错了什么还是 Pandas 中有一些错误?
谢谢

最佳答案

问题是

df.groupby(by='X')['Y'].rolling(window=2, min_periods=2).sum()
返回一个新系列,然后当您与 shift() 链接时,您将系列作为一个整体移动,而不是在组内移动。
您需要另一个 groupby在组内转移:
grouped_df = (df.groupby(by='X')['Y'].rolling(window=2, min_periods=2).sum()
.groupby(level=0).shift(periods=1)
)
或使用 groupby.transform :
grouped_df = (df.groupby('X')['Y']
.transform(lambda x: x.rolling(window=2, min_periods=2)
.sum().shift(periods=1))
)
输出:
X   
A 0 NaN
1 NaN
2 3.0
B 3 NaN
4 NaN
5 3.0
C 6 NaN
7 NaN
8 3.0
Name: Y, dtype: float64

关于python - Pandas - 在分组溢出后将滚动总和转移到以下组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64592950/

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