Pandas:在滚动窗口中查找max,并返回max行和继续四行的另一列的总和

2024-05-23 19:59:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有两列的数据框。我想找到第一列的滚动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 

以下是所需输出的示例:

enter image description here


Tags: 数据代码示例dataframedfdatamaxcol2
1条回答
网友
1楼 · 发布于 2024-05-23 19:59:56

只能对下一个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

相关问题 更多 >