【问题标题】:Pandas custom re-sample for time series dataPandas 为时间序列数据自定义重新采样
【发布时间】:2018-07-29 05:34:38
【问题描述】:

我有一个频率为 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)

【问题讨论】:

  • 预期输出是什么?
  • 对第一个时间步、中间时间步和最后一个时间步的数据重新采样5分钟的bin相当于2分钟的binning。
  • @puja 中间 timstep 对应的输出应该是什么?

标签: python pandas numpy


【解决方案1】:

如果我对您的理解正确,那么您希望将 0、2、4、5、7、9、10 分钟的数据放在一个新的数据框中。比使用 resample 更快的方法可能是:

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)

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多