【问题标题】:resample/interpolate time series with datetimeindex使用 datetimeindex 重新采样/插值时间序列
【发布时间】:2019-10-20 04:43:32
【问题描述】:

我有两个数据帧,每个数据帧都包含来自同一时间帧的一个或多个时间序列,但以不同的时间戳进行采样。

我想将它们合并为一个重新采样并使用第一个索引进行插值的单个。

这是第一个数据帧的示例:

                        a      b      c     d
2013-01-01 07:00:00  0.45  24.33   9.04  0.00
2013-01-01 08:00:00  0.55  23.11  11.60  0.06
2013-01-01 09:00:00  0.69  27.23  18.18  0.03
2013-01-01 10:00:00  0.64  26.58  31.46  0.06
2013-01-01 11:00:00  0.36  17.50  42.58  0.29
2013-01-01 12:00:00  0.32  15.39  50.30  0.17
2013-01-01 13:00:00  0.41  17.73  51.45  0.13
2013-01-01 14:00:00  0.50  19.48  50.50  0.05
2013-01-01 15:00:00  0.48  18.32  51.51  0.03
2013-01-01 16:00:00  0.50  18.49  50.70  0.02
2013-01-01 17:00:00  1.13  32.89  40.07  0.20
2013-01-01 18:00:00  1.81  59.64  16.59  0.37

第二个:

                        e
2013-01-01 06:15:00   9.0
2013-01-01 06:45:00   9.0
2013-01-01 06:55:00   9.0
2013-01-01 07:15:00   9.0
2013-01-01 07:45:00   9.0
2013-01-01 07:55:00   9.0
2013-01-01 08:15:00  10.0
2013-01-01 08:45:00  11.0
2013-01-01 08:55:00  11.0
2013-01-01 09:15:00  12.0
2013-01-01 09:45:00  13.0
2013-01-01 09:55:00  13.0
2013-01-01 10:15:00  14.0
2013-01-01 10:45:00  15.0
2013-01-01 10:55:00  15.0
2013-01-01 11:15:00  14.0
2013-01-01 11:45:00  14.0
2013-01-01 11:55:00  14.0
2013-01-01 12:15:00  14.0
2013-01-01 12:45:00  14.0
2013-01-01 12:55:00  14.0
2013-01-01 13:15:00  14.0
2013-01-01 13:45:00  14.0
2013-01-01 13:55:00  14.0
2013-01-01 14:15:00  14.0
2013-01-01 14:45:00  14.0
2013-01-01 14:55:00  14.0
2013-01-01 15:15:00  14.0
2013-01-01 15:45:00  13.0
2013-01-01 15:55:00  13.0
2013-01-01 16:15:00  13.0
2013-01-01 16:45:00  13.0
2013-01-01 16:55:00  13.0
2013-01-01 17:15:00  12.0
2013-01-01 17:45:00  12.0
2013-01-01 17:55:00  12.0
2013-01-01 18:15:00  11.0

在这种情况下,第二个更细化,但不一定如此。我想用第一个日期重新采样第二个。 这可能以优雅的熊猫方式实现吗?

我用完整的数据框尝试了reindex,但它抱怨重复轴。也许这真的是我的问题。

【问题讨论】:

  • 您希望如何将细粒度的记录聚合到一个大的时间范围内?平均值、最大值、第一、总和?
  • @ScottBoston 首先会很好,平均最好

标签: python pandas time-series interpolation resampling


【解决方案1】:

一个简单的new_df = pd.concat((df1,df2), axis=1) 保留所有信息和时间戳。您可以根据需要选择重新采样new_df

在这种特定情况下,您可以这样做:

pd.concat((df1, df2.groupby(df2.index.floor('H')).mean()), axis=1)

输出:

                        a       b       c       d       e
idx                     
2013-01-01 06:00:00     NaN     NaN     NaN     NaN     9.000000
2013-01-01 07:00:00     0.45    24.33   9.04    0.00    9.000000
2013-01-01 08:00:00     0.55    23.11   11.60   0.06    10.666667
2013-01-01 09:00:00     0.69    27.23   18.18   0.03    12.666667
2013-01-01 10:00:00     0.64    26.58   31.46   0.06    14.666667
2013-01-01 11:00:00     0.36    17.50   42.58   0.29    14.000000
2013-01-01 12:00:00     0.32    15.39   50.30   0.17    14.000000
2013-01-01 13:00:00     0.41    17.73   51.45   0.13    14.000000
2013-01-01 14:00:00     0.50    19.48   50.50   0.05    14.000000
2013-01-01 15:00:00     0.48    18.32   51.51   0.03    13.333333
2013-01-01 16:00:00     0.50    18.49   50.70   0.02    13.000000
2013-01-01 17:00:00     1.13    32.89   40.07   0.20    12.000000
2013-01-01 18:00:00     1.81    59.64   16.59   0.37    11.000000

【讨论】:

  • 一个简单的 pd concat 和 resample 实际上可能是我正在寻找的答案
猜你喜欢
  • 2020-05-18
  • 2017-03-14
  • 2015-11-07
  • 2021-01-02
  • 1970-01-01
  • 2017-02-23
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多