大熊猫在夜间重新采样

时间:2019-05-22 20:59:14

标签: python pandas time-series

我有一个多元时间序列数组。目前,该时间序列以10秒为间隔进行汇总:

**Time**
2016-01-11 17:00:00
2016-01-11 17:00:10
2016-01-11 17:00:20

我想进行重新采样,以便每天获得5个小时的时间范围(时间在数据框中的显示方式无关紧要,只要正确地汇总时间就可以了)。我正在按平均值重新采样。

**Time**
2016-01-11 10:00:00-15:00:00
2016-01-12 10:00:00-15:00:00
2016-01-13 10:00:00-15:00:00

这怎么办?

2 个答案:

答案 0 :(得分:2)

首先,我要过滤所需的时间段并按天分组:

# mask the hours we want
hours = df.index.hour
mask = (hours >= 10) & (hours <=14)

# groupby
df[mask].groupby(df[mask].index.floor('D')).mean()

玩具数据:

Times = pd.date_range('2016-01-11', '2016-01-14', freq='10s')

np.random.seed(1)
df = pd.DataFrame({'Time': Times,
                   'Value': np.random.randint(1,10, len(Times))})

给予:

            Value
Time    
2016-01-11  4.993333
2016-01-12  5.030556
2016-01-13  5.012778

答案 1 :(得分:0)

df.groupby([df['Time'].dt.month, df['Time'].dt.day]).apply(lambda x: x.set_index('Time').resample('5H').mean())

您必须先按时间列的月和日分组,然后在5H(5小时)内对“时间”列进行重新采样,然后再进行.mean(),这将取其他列的平均值

使用groupby的原因是,您不想每天整天只间隔5个小时,而只想每天一次。只要您的时间在5小时以内,您每天只会获得一个间隔。