首页 > 解决方案 > 如何使用 Pandas 查找固定时间段之间的 AVG 和 STD

问题描述

我的数据集df如下所示:

DateTimeVal            Open 
2017-01-01 17:00:00    5.1532    
2017-01-01 17:01:00    5.3522 
2017-01-01 17:02:00    5.4535    
2017-01-01 17:03:00    5.3567    
2017-01-01 17:04:00    5.1512 
....

它是一个minute diff基于数据集。

在我的计算中,一天(24 hour)定义为:

17:00:00 Sundayto16:59:00 Monday等其他日子

我想要做的是整天找到每个from to等的AVG,和STD24 hour17:00:00 Sunday16:59:00 Monday

我做了什么?

我这样做是rolling为了找到,AVG但它确实适用于 aday而不是time-range

# day avg
# 7 day rolling avg

df = (
df.assign(DAY_AVG=df.rolling(window=1*24*60)['Open'].mean()) 
df.assign(7DAY_AVG=df.rolling(window=7*24*60)['Open'].mean())
.groupby(df['DateTimeVal'].dt.date) 
.last() ) 

我需要这两件事的帮助:

标签: python-3.xpandasdataframe

解决方案


resample与 一起使用base

#Create empty dataframe for 2 days
df = pd.DataFrame(index = pd.date_range('2017-07-01', periods=48, freq='1H'))

#Set value equal to 1 from 17:00 to 16:59 next day
df.loc['2017-07-01 17:00:00': '2017-07-02 16:59:59', 'Value'] = 1

print(df)

输出:

                     Value
2017-07-01 00:00:00    NaN
2017-07-01 01:00:00    NaN
2017-07-01 02:00:00    NaN
2017-07-01 03:00:00    NaN
2017-07-01 04:00:00    NaN
2017-07-01 05:00:00    NaN
2017-07-01 06:00:00    NaN
2017-07-01 07:00:00    NaN
2017-07-01 08:00:00    NaN
2017-07-01 09:00:00    NaN
2017-07-01 10:00:00    NaN
2017-07-01 11:00:00    NaN
2017-07-01 12:00:00    NaN
2017-07-01 13:00:00    NaN
2017-07-01 14:00:00    NaN
2017-07-01 15:00:00    NaN
2017-07-01 16:00:00    NaN
2017-07-01 17:00:00    1.0
2017-07-01 18:00:00    1.0
2017-07-01 19:00:00    1.0
2017-07-01 20:00:00    1.0
2017-07-01 21:00:00    1.0
2017-07-01 22:00:00    1.0
2017-07-01 23:00:00    1.0
2017-07-02 00:00:00    1.0
2017-07-02 01:00:00    1.0
2017-07-02 02:00:00    1.0
2017-07-02 03:00:00    1.0
2017-07-02 04:00:00    1.0
2017-07-02 05:00:00    1.0
2017-07-02 06:00:00    1.0
2017-07-02 07:00:00    1.0
2017-07-02 08:00:00    1.0
2017-07-02 09:00:00    1.0
2017-07-02 10:00:00    1.0
2017-07-02 11:00:00    1.0
2017-07-02 12:00:00    1.0
2017-07-02 13:00:00    1.0
2017-07-02 14:00:00    1.0
2017-07-02 15:00:00    1.0
2017-07-02 16:00:00    1.0
2017-07-02 17:00:00    NaN
2017-07-02 18:00:00    NaN
2017-07-02 19:00:00    NaN
2017-07-02 20:00:00    NaN
2017-07-02 21:00:00    NaN
2017-07-02 22:00:00    NaN
2017-07-02 23:00:00    NaN

现在使用,resamplebase=17

df.resample('24H', base=17).sum()

输出:

                     Value
2017-06-30 17:00:00    0.0
2017-07-01 17:00:00   24.0
2017-07-02 17:00:00    0.0

更新分钟采样:

df = pd.DataFrame({'Value': 0}, index = pd.date_range('2018-10-01', '2018-10-03', freq='1T'))

df.loc['2018-10-01 15:00:00':'2018-10-02 18:59:50', 'Value'] = 1

df.resample('24H', base=17).agg(['sum','mean'])

输出:

                    Value          
                      sum      mean
2018-09-30 17:00:00   120  0.117647
2018-10-01 17:00:00  1440  1.000000
2018-10-02 17:00:00   120  0.285036

推荐阅读