熊猫定制重新采样时间序列数据

时间:2018-07-29 05:34:39

标签: python pandas numpy

我有一个频率为1分钟的时间序列数据。我想每5分钟重新采样一次数据,并且重新采样的数据应包括第一时间步长,中间时间步长和最后时间步长的数据。

我已经尝试过了,但是我没有得到我所期望的...

def my_fun(array)
     return array[0],array[-1]


df=pd.DataFrame(np.arange(60),index=pd.date_range('2017-01-01 00:00','2017-01-01 00:59', freq='1T'

df.resample('5T').apply(my_fun)

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您希望在新数据框中记录分钟0,2,4,5,7,9,10,...的数据。比使用重采样更快的方法可能是:

df=pd.DataFrame(np.arange(60),index=pd.date_range('2017-01-01 00:00','2017-01-01 00:59', freq='1T'))
l = len(df)
df.loc[df.iloc[range(2,l,5)].index | df.iloc[range(4,l,5)].index | df.iloc[range(0,l,5)].index]

输出:

                        0
2017-01-01 00:00:00     0
2017-01-01 00:02:00     2
2017-01-01 00:04:00     4
2017-01-01 00:05:00     5
2017-01-01 00:07:00     7
2017-01-01 00:09:00     9
2017-01-01 00:10:00     10

如果您只想将所选数据的组合列表排成一行,那么您就快到了:

def my_fun(array):
      return [array[0], array[2], array[4]]

df=pd.DataFrame({'0':np.arange(60)}, index=pd.date_range('2017-01-01 00:00','2017-01-01 00:59', freq='1T'))
df.resample('5T').apply(my_fun)

输出:

                        0
2017-01-01 00:00:00     (0, 2, 4)
2017-01-01 00:05:00     (5, 7, 9)
2017-01-01 00:10:00     (10, 12, 14)