本文主要是介绍pandas rolling 时间窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用场景
在数据竞赛和真实业务中通常会构造时间窗口类指标,除了能用SQL实现上述操作外,我也想在python中实现上诉指标的计算,然后我就发现了pandas中的rolling函数
import pandas as pd
import numpy as np# 从2023年4月2日0点开始每6个小时采样一个时间点
df = pd.DataFrame(np.random.randn(90, 4),index = pd.date_range('00:00 2/4/2023', periods=90, freq='6h'),columns = ['A', 'B', 'C', 'D'])
# 增加id列
df['id'] = np.random.randint(1, high=5, size=90)
df.head()A B C D id
2023-02-04 00:00:00 0.938225 -0.241316 0.877582 0.614576 2
2023-02-04 06:00:00 0.226625 0.083460 -1.971594 -0.413062 2
2023-02-04 12:00:00 0.920138 0.097953 -0.438336 -0.543366 2
2023-02-04 18:00:00 -0.999658 1.384894 -0.103531 -0.748414 2
2023-02-05 00:00:00 -0.126249 -0.067353 -1.577542 -1.228433 4
直接上干货
下面的代码实现了对不同id近一天的不同指标进行统计
df.groupby(['id'], as_index= False).rolling(window='1d').agg({'A': ['mean', 'std'],'B': ['sum', 'max'],'C':[ np.ptp],'D': ['min', 'max']})
几个需要注意的
- 如果需要对分组后的多列进行统计, 则需要讲日期列设为index
- 上诉统计包含的当前时刻,如果不希望包含当前时间则可以设置
closed='left'
这篇关于pandas rolling 时间窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!