pandas - 在较长的周期内,python Pandas: 获取每日范围的平均值组

  显示原文与译文双语对照的内容
0 0

每天,我想得到一系列 上午8点 到 5 pm之间值的平均值。 在每天的平均值中,我想为一个范围周期的一个新的值,例如一个月或者一年或者一个。 我如何在 Pandas 中做到这一点?

例如 aug-2011 到 nov-2011的平均值在 上午8点 和 5之间的日范围。


Time T_Sanyo_Gesloten

2010-08-31 12:30:00 33.910
2010-08-31 12:40:00 33.250
2010-08-31 12:50:00 30.500
2010-08-31 13:00:00 27.065
2010-08-31 13:10:00 25.610
...

2013-06-07 02:10:00 16.970
2013-06-07 02:20:00 16.955
2013-06-07 02:30:00 17.000
2013-06-07 02:40:00 17.015
2013-06-07 02:50:00 16.910

时间: 原作者:

0 0

import datetime as DT
import numpy as np
import pandas as pd

np.random.seed(2013)
N = 10**4
df = pd.DataFrame(
 np.cumsum(np.random.random(N) - 0.5),
 index=pd.date_range('2010-8-31', freq='10T', periods=N))
# 0
# 2010-08-31 00:00:00 0.175448
# 2010-08-31 00:10:00 0.631796
# 2010-08-31 00:20:00 0.399373
# 2010-08-31 00:30:00 0.499184
# 2010-08-31 00:40:00 0.631005
#.. .
# 2010-11-08 09:50:00 -3.474801
# 2010-11-08 10:00:00 -3.172819
# 2010-11-08 10:10:00 -2.988451
# 2010-11-08 10:20:00 -3.101262
# 2010-11-08 10:30:00 -3.477685

eight_to_five = df.ix[df.index.indexer_between_time(DT.time(8), DT.time(17))]
# 0
# 2010-08-31 08:00:00 1.440543
# 2010-08-31 08:10:00 1.450957
# 2010-08-31 08:20:00 1.746454
# 2010-08-31 08:30:00 1.443941
# 2010-08-31 08:40:00 1.845446
#.. .
# 2010-11-08 09:50:00 -3.474801
# 2010-11-08 10:00:00 -3.172819
# 2010-11-08 10:10:00 -2.988451
# 2010-11-08 10:20:00 -3.101262
# 2010-11-08 10:30:00 -3.477685

# daily_mean = eight_to_five.groupby()
daily_mean = eight_to_five.resample('D', how='mean')
# 0
# 2010-08-31 0.754004
# 2010-09-01 0.203610
# 2010-09-02 5.219528
# 2010-09-03 6.337688
# 2010-09-04 2.765504

monthly_mean = daily_mean.resample('M', how='mean')
# 0
# 2010-08-31 0.754004
# 2010-09-30 -0.437582
# 2010-10-31 3.533525
# 2010-11-30 4.356728

yearly_mean = daily_mean.groupby(daily_mean.index.year).mean()
# 0
# 2010 1.885995

若要获取自定义,你必须更改传递给 groupby的参数。

原作者:
...