我需要对数据框架的列进行滚动求和,验证行(2到5行)的总和是否= 0,并将对应的行标记为“取消”。我试过这个:
df['somme_glissante'] = df['CP'].notnull().rolling(window=5).sum() df_zero = df.loc[df['somme_glissante'] == 0]
但我看不清哪条线在哪条线上。我该怎么做?谢谢。
jum4pzuy1#
要标记滚动总和为0的行,可以使用rolling方法和sum()函数计算滚动总和,然后使用shift()将结果与原始 Dataframe 对齐。之后,可以使用布尔索引过滤滚动总和为0的行,并添加一个新列将其标记为“取消”。下面是一个示例代码:
rolling
sum()
shift()
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()替换缺失值,然后再计算滚动和。
rolling_sum
shift(-4)
min_periods
rolling_sum == 0
loc
fillna()
1条答案
按热度按时间jum4pzuy1#
要标记滚动总和为0的行,可以使用
rolling
方法和sum()
函数计算滚动总和,然后使用shift()
将结果与原始 Dataframe 对齐。之后,可以使用布尔索引过滤滚动总和为0的行,并添加一个新列将其标记为“取消”。下面是一个示例代码:在此代码中,
rolling_sum
是一个Series,其滚动和为'CP'列,但与原始数据框对齐(使用shift(-4)
)。min_periods
参数确保仅为至少具有2个非空值的窗口计算滚动和。然后,我们使用布尔索引来过滤滚动和为0的行(
rolling_sum == 0
),并添加一个新的列'status'来将它们标记为“已取消”。loc
函数用于选择滚动和为0的行并更新'status'列。请注意,此代码假定“CP”列包含数值。如果“CP”列包含缺失值(NaN),则可能需要调整
min_periods
参数或使用fillna()
替换缺失值,然后再计算滚动和。