Python和Pandas:第30天至第60天滚动法的最小值和最大值

fae0ux8s  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(176)

如何获取第60天到第90天、第30天到第60天、第1天到第30天之间的pandas天中 Dataframe 列的最大值和最小值。必须采用滚动形式并使用groupby。
我试过用iloc和loc。

dgiusagp

dgiusagp1#

您的问题缺少示例,但您肯定可以将cutgroupby.agg结合起来:

# set up dummy example
df = pd.DataFrame({'date': pd.date_range('2023-03-10', '2023-05-31', freq='D'),
                   'value': range(83)})

# compute groups of 0-30, 30-60, 60-90 days after min date
group = pd.cut(df['date'].sub(df['date'].min()).dt.days,
               [0, 30, 60, 90], right=True)

# aggregate
out = df.groupby(group)['value'].agg(['min', 'max'])

输出:

min  max
date              
(0, 30]     1   30
(30, 60]   31   60
(60, 90]   61   82

如果您更希望30天内的rolling最小值/最大值(但这会提供所有组合:1-30、2-31、3-32等,直至61-90):

df.set_index('date').rolling('30D').agg(['min', 'max'])

输出:

value      
             min   max
date                  
2023-03-10   0.0   0.0
2023-03-11   0.0   1.0
2023-03-12   0.0   2.0
2023-03-13   0.0   3.0
2023-03-14   0.0   4.0
...          ...   ...
2023-05-27  49.0  78.0
2023-05-28  50.0  79.0
2023-05-29  51.0  80.0
2023-05-30  52.0  81.0
2023-05-31  53.0  82.0

[83 rows x 2 columns]

相关问题