pandas 我如何做一个滚动求和并在python中取相应的行?

3htmauhk  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(204)

我需要对数据框架的列进行滚动求和,验证行(2到5行)的总和是否= 0,并将对应的行标记为“取消”。
我试过这个:

df['somme_glissante'] = df['CP'].notnull().rolling(window=5).sum()
df_zero = df.loc[df['somme_glissante'] == 0]

但我看不清哪条线在哪条线上。
我该怎么做?谢谢。

jum4pzuy

jum4pzuy1#

要标记滚动总和为0的行,可以使用rolling方法和sum()函数计算滚动总和,然后使用shift()将结果与原始 Dataframe 对齐。之后,可以使用布尔索引过滤滚动总和为0的行,并添加一个新列将其标记为“取消”。下面是一个示例代码:

calculate rolling sum and align with original dataframe
rolling_sum = df['CP'].rolling(window=5, min_periods=2).sum().shift(-4)

filter rows with rolling sum of 0 and flag as "canceled"
df.loc[(rolling_sum == 0), 'status'] = 'canceled'

在此代码中,rolling_sum是一个Series,其滚动和为'CP'列,但与原始数据框对齐(使用shift(-4))。min_periods参数确保仅为至少具有2个非空值的窗口计算滚动和。
然后,我们使用布尔索引来过滤滚动和为0的行(rolling_sum == 0),并添加一个新的列'status'来将它们标记为“已取消”。loc函数用于选择滚动和为0的行并更新'status'列。
请注意,此代码假定“CP”列包含数值。如果“CP”列包含缺失值(NaN),则可能需要调整min_periods参数或使用fillna()替换缺失值,然后再计算滚动和。

相关问题