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

发布于 2025-01-11 19:32:57 字数 700 浏览 0 评论 0原文

我正在编写一个函数,如果另一列的 n 前行为负数,我想向数据帧添加一个系列,该系列为 True

我将其用于特定数字 n,但我不知道如何将其概括为可以传入的参数。

例如,我们有一个数据帧,其中包含名为 的列>总计。如果有 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)
    )

I'm writing a function where I'd like to add a series to a dataframe that is True if n previous rows of another column are negative.

I have this working for a specific number as n, but I don't know how to generalize it into a parameter that could be passed in.

For example, we have a dataframe with a column named Total. The following code will put True in rows in a column titled consecutive_negative_value if there are 6 consecutive rows where Total is less than zero. How can this be generalized to accept any number n instead of just checking six periods?

    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)
    )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初相遇 2025-01-18 19:32:57

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

window = 6
df.Total.lt(0).rolling(window).sum() == 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

You can use rolling.sum and check if the sum value is equal to the window size:

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

Example with a window size of 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文