【问题标题】:Efficient and elegant merge of time series data in numpy在 numpy 中高效优雅地合并时间序列数据
【发布时间】:2019-10-08 13:39:16
【问题描述】:

我有两个(或更多,但两个足以解决核心问题)时间序列,以配对列表的形式(time, value)

Series x
time    0  2  4  5  8  9
value  x0 x2 x4 x5 x8 x9

Series y
time    0  2  3  5  7  8
value  y0 y2 y3 y5 y7 y8

我想要得到的是来自两个原始系列的单个时间序列的元组,以这样的方式,时间对齐,使用当时的值和不使用的值,最后一次的值可用:

time     0  2  3  4  5  7  8  9
x vals  x0 x2 x2 x4 x5 x5 x8 x9
y vals  y0 y2 y3 y3 y5 y7 y8 y8

在我的具体环境中,两个时间序列是二维 numpy 数组,其中一行保存时间,另一行保存值。还可以假设所有系列同时开始(例如 0),因此它们总是在开始时对齐。

当然,这可以通过“手动”通过循环“手动”解决,该循环将“指针”指向系列中的当前位置并移动指针。但是,在 numpy 中是否有一种简单而优雅的方法?

【问题讨论】:

  • 第一个想法:你想要pandas
  • 似乎太复杂,无法开箱即用

标签: python numpy


【解决方案1】:

您确实需要pandas

df1 = pd.DataFrame({'time':[0,2,4,5,8,9],
                    'value':['x0','x2','x4','x5','x8','x9']})


df2 = pd.DataFrame({'time':[0,2,3,5,7,8],
                    'value':['y0','y2','y3','y5','y7','y8']})

df1.merge(df2, on='time', how='outer').sort_values('time').ffill()

输出:

   time value_x value_y
0     0      x0      y0
1     2      x2      y2
6     3      x2      y3
2     4      x4      y3
3     5      x5      y5
7     7      x5      y7
4     8      x8      y8
5     9      x9      y8

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2010-10-21
    • 2020-03-11
    • 2017-03-07
    • 2018-05-18
    • 2014-03-21
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多