【问题标题】:Pandas: sum next 5 items of dataframe after some specific item熊猫:在某个特定项目之后总结接下来的 5 项数据框
【发布时间】:2022-11-26 21:04:44
【问题描述】:

我有 DataFrame,它看起来只是一个数字列表:

original option 1 option 2
1 NaN NaN
-1 NaN 9
4 NaN NaN
-1 NaN 15
6 9 NaN
7 NaN NaN
2 15 NaN
3 NaN NaN
0 NaN NaN

我需要在每个负值之后对 df 的下 3 个值求和 - 请参阅“option1”或“option2”列。 如果我只得到求和结果,也就是一个单独的数据结构,看起来像 [9, 15],它也可以工作。

有什么想法吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    一种方法如下:

    import pandas as pd
    
    data = {'original': {0: 1, 1: -1, 2: 4, 3: -1, 4: 6, 5: 7, 6: 2, 7: 3, 8: 0}}
    df = pd.DataFrame(data)
    
    n = 3
    
    df['option 1'] = (df['original'].rolling(n).sum()
                      .where(df['original'].shift(n).lt(0))
                      )
                      
    df['option 2'] = df['option 1'].shift(-n)
    
    print(df)
    
       original  option 1  option 2
    0         1       NaN       NaN
    1        -1       NaN       9.0
    2         4       NaN       NaN
    3        -1       NaN      15.0
    4         6       9.0       NaN
    5         7       NaN       NaN
    6         2      15.0       NaN
    7         3       NaN       NaN
    8         0       NaN       NaN
    

    解释

    • 首先,使用Series.rolling创建一个用于申请sum的滚动窗口。
    • 接下来,链接 Series.where 并将 cond 参数设置为对列 original 的移位 (shift) 版本小于零 (lt) 的值的评估。
    • 对于option 2,我们只需对option 1应用负偏移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-28
      • 2019-10-08
      • 1970-01-01
      • 2021-03-21
      • 2021-01-22
      • 2023-01-10
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多