Press "Enter" to skip to content

Pandas中时间窗函数rolling()和expanding()的使用

rolling()函数

在做数据分析过程中,我们常常需要需要对有时间关系的数据进行整理。比如我们想要得到某一时刻过去30分钟的销量(产量,速度,消耗量等),传统方法复杂消耗资源较多,pandas提供的rolling使用简单,速度较快。

举个例子

打开一份数据

假设我想知道浦发银行2019年收盘价前3天的平均值是多少?这个时候就可以使用时间窗函数rolling

具体操作如下:

import pandas as pd

pd.set_option('display.unicode.ambiguous_as_wide', True)  #处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True)   #无法对齐主要是因为列标题是中文

df=pd.read_csv(r'data\sh600000.csv',encoding='gbk')
df['交易日期']=pd.to_datetime(df['交易日期'])
df.set_index('交易日期',inplace=True)
df=df['2019']
df['收盘价_3天均值']=df['收盘价'].rolling(3).mean()

print(df[['收盘价','收盘价_3天均值']])

这样就得出每一天前三天的平均值了

expanding()函数

expanding()函数的参数,与rolling()函数的参数用法相同,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算;

下面还是用一个例子来演示一下

打开一份数据

假设我想求 收盘价至今 的平均值,就可以使用这个expanding()函数

具体操作如下:

import pandas as pd

pd.set_option('display.unicode.ambiguous_as_wide', True)  #处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True)   #无法对齐主要是因为列标题是中文

df=pd.read_csv(r'data\sh600000.csv',encoding='gbk')
df['交易日期']=pd.to_datetime(df['交易日期'])
df.set_index('交易日期',inplace=True)
df['收盘价_至今均值']=df['收盘价'].expanding().mean()

print(df[['收盘价','收盘价_至今均值']])

除了求它的平均值,它还可以求最大值max(),最小值min(),标准偏差std()等。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注