如何通过Unix时间戳合并时间序列数据帧

时间:2019-09-27 18:08:28

标签: python pandas dataframe

我有两个都包含时间序列数据的数据框。两者都有两列,一列是Unix时间(以毫秒为单位),另一列有一个值。这两个数据帧具有不同的采样频率。

DATAFRAME1:

    time [s/1000]     DATA1 
0   1558970242000   -0.019531
1   1558970242025   -0.078125
2   1558970242050   -0.058594
3   1558970242075   -0.054688
4   1558970242100   -0.046875
.         .              .
.         .              .
.         .              .

DATAFRAME2:

    time [s/1000]     DATA2 
0   1558970242000   -0.054567
1   1558970242050   -0.073567
2   1558970242100   -0.954543
.         .              .
.         .              .
.         .              .

期望的输出:

    time [s/1000]      DATA1        DATA2
0   1558970242000   -0.019531     -0.054567      **hold data for 25ms
1   1558970242025   -0.078125     -0.054567
2   1558970242050   -0.058594     -0.073567
3   1558970242075   -0.054688     -0.073567
5   1558970242100   -0.046875     -0.954543
.         .              .            .
.         .              .            .  
.         .              .            .

我在弄清楚如何实现这一点时遇到了麻烦。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

重新索引第二个数据帧,使其具有与第一个相同的频率:

df1 = df1.set_index('time [s/1000]')
df2 = df2.set_index('time [s/1000]')
result = df1.join(df2.reindex(df1.index, method='ffill'))

答案 1 :(得分:3)

这是merge_asofdocs)的绝佳用例:

df
            time     DATA1
0  1558970242000 -0.019531
1  1558970242025 -0.078125
2  1558970242050 -0.058594
3  1558970242075 -0.054688
4  1558970242100 -0.046875

df2
            time     DATA2
0  1558970242000 -0.054567
1  1558970242050 -0.073567
2  1558970242100 -0.954543

pd.merge_asof(df, df2, on='time')

            time     DATA1     DATA2
0  1558970242000 -0.019531 -0.054567
1  1558970242025 -0.078125 -0.054567
2  1558970242050 -0.058594 -0.073567
3  1558970242075 -0.054688 -0.073567
4  1558970242100 -0.046875 -0.954543

说明

对于 left 数据帧中的每一行,默认的direction='backward'合并从右侧DataFrame的'on'键为 last 行中选择小于或等于左键。

在您的情况下,这意味着结果DataFrame中的每一行都包含DATA2的值截至行中的时间戳。 “截至该行的时间戳记,这是DATA2的最后观察值。”