gpt4 book ai didi

python - Pandas 在 groupby 中前瞻性滚动计数以计数到组中的最后一行

转载 作者:行者123 更新时间:2023-12-05 04:23:43 24 4
gpt4 key购买 nike

我有以下示例数据集,其中包含我预期的输出列。我的数据中有空的 NaN 值,因此添加了“NaN”作为示例。

 data={'Store':[1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2],
'Week':[1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,10,11,12],
'CopyCheck':[10,10,np.nan,np.nan,10,10,10,np.nan,10,np.nan,10,10,10,10,np.nan,np.nan,10,10,10],
'Expected Next3CopyCount':[2,1,1,2,3,2,1,1,2,2,3,3,2,1,1,2,3,2,1]}
df=pd.DataFrame.from_dict(data)

我已经尝试使用下面的代码进行前瞻性滚动计数,以计算数据框中的非空行(包括当前行)。当它到达我没有 3 行的每个组的末尾时,如果少于 3,我的代码将返回 0 或 NaN 而不是将行相加。我怎样才能调整我的代码以获得我正在寻找的结果

编辑:我还注意到滚动计数会滚动到下一组并为 Store 1 的最后 3 行添加一个错误计数。为什么 groupby 在 Store 上不起作用?

df['Next3Copies'] = df['CheckCopy'].groupby(df['Store']).rolling(3,min_periods=1).count().shift(-2).values

最佳答案

前滚的一种方法是使用 iloc[::-1] 反转数据,那么这几乎就是您为 groupby.rolling.count 所做的.为了能够重新分配值,您可以 sort_index具有原始索引的数据并获得值数组。

df['exp'] = (
df.iloc[::-1] # reverse the data to do rolling forward
.groupby(df['Store']).rolling(3,min_periods=1)
['CopyCheck'].count()
.sort_index(level=1) # get original order
.to_numpy().astype(int) #now you can get values
)
print(df)
# Store Week CopyCheck Expected Next3CopyCount exp
# 0 1 1 10.0 2 2
# 1 1 2 10.0 1 1
# 2 1 3 NaN 1 1
# 3 1 4 NaN 2 2
# 4 1 5 10.0 3 3
# 5 1 6 10.0 2 2
# 6 1 7 10.0 1 1
# 7 2 1 NaN 1 1
# 8 2 2 10.0 2 2
# 9 2 3 NaN 2 2
# 10 2 4 10.0 3 3
# 11 2 5 10.0 3 3

关于python - Pandas 在 groupby 中前瞻性滚动计数以计数到组中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73665125/

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