【问题标题】:Pandas: Find max in rolling window and return sum of another column for the row of the max and proceeding four rows熊猫:在滚动窗口中查找最大值并返回最大值行的另一列的总和并进行四行
【发布时间】:2021-05-20 23:50:16
【问题描述】:

我有一个包含两列的数据框。我想找到第一列的滚动 5 周期最大值,并计算滚动最大值的行和前 4 行的值和第二列。

下面是上面提到的 Col1 和 Col2 的期望输出示例,滚动最大值的第三列和期望计算结果的最后一列

这里是设置前三列的代码:

data ={'Col1': [4,2,3,4,5,6,5,4,3,2,1,4,3,2,1],
  'Col2' :[10,20,10,15,10,20,10,15,10,20,10,15,10,20,10]}
df = pd.DataFrame(data) 
df['Col1_Rolling5_Max'] = df['Col1'].rolling(5).max()
df 

以下是所需输出的示例:

【问题讨论】:

    标签: python pandas dataframe rolling-computation


    【解决方案1】:

    您只能计算下一个Rolling5_Max 不同的行的滚动总和,然后向前填充以填充其余部分。

    import pandas as pd
    import numpy as np
    
    data ={'Col1': [4,2,3,4,5,6,5,4,3,2,1,4,3,2,1],
      'Col2' :[10,20,10,15,10,20,10,15,10,20,10,15,10,20,10]}
    df = pd.DataFrame(data) 
    df['Col1_Rolling5_Max'] = df['Col1'].rolling(5).max()
    
    
    df['flag'] = df['Col1_Rolling5_Max'].ne(df['Col1_Rolling5_Max'].shift())
    df['Sum_5_Col1_Before_Max']= np.where(df['flag']==True,df['Col2'].rolling(5).sum(),np.nan)
    df.ffill(inplace=True)
    df[['Col1','Col2','Col1_Rolling5_Max','Sum_5_Col1_Before_Max']]
    

    输出

        Col1  Col2  Col1_Rolling5_Max  Sum_5_Col1_Before_Max
    0      4    10                NaN                    NaN
    1      2    20                NaN                    NaN
    2      3    10                NaN                    NaN
    3      4    15                NaN                    NaN
    4      5    10                5.0                   65.0
    5      6    20                6.0                   75.0
    6      5    10                6.0                   75.0
    7      4    15                6.0                   75.0
    8      3    10                6.0                   75.0
    9      2    20                6.0                   75.0
    10     1    10                5.0                   65.0
    11     4    15                4.0                   70.0
    12     3    10                4.0                   70.0
    13     2    20                4.0                   70.0
    14     1    10                4.0                   70.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 2019-11-26
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多