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
我正在编写一个函数,如果 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