Pandas - 检查前几行条件的通用函数

Pandas - General function for checking condition on previous rows

我正在编写一个函数,如果 n 另一列的前几行是负数,我想将一个系列添加到 True 的数据框。

我有一个特定的数字作为 n,但我不知道如何将它概括为可以传入的参数。

例如,我们有一个数据框,其中有一列名为 Total。如果有 6 行 Total 小于零,则以下代码会将 True 放入标题为 consecutive_negative_value 的列的行中。如何将其概括为接受任何数字 n 而不是仅检查六个周期?

    df['negative_value'] = df['Total'] < 0
    
    df['consecutive_negative_value'] = ( 
        df['negative_value'] &
        df['negative_value'].shift(1) &
        df['negative_value'].shift(2) &
        df['negative_value'].shift(3) &
        df['negative_value'].shift(4) &
        df['negative_value'].shift(5)
    )

您可以使用 rolling.sum 并检查总和值是否等于 window 大小:

window = 6
df.Total.lt(0).rolling(window).sum() == window

示例 window 大小为 3:

df = pd.DataFrame({'Total': [-1, 2, -2, -2, -3, 2, 3, -1]})

df.Total.lt(0).rolling(3).sum() == 3
0    False
1    False
2    False
3    False
4     True
5    False
6    False
7    False
Name: Total, dtype: bool