在Python中合并两个不均匀间隔的时间序列

时间:2017-07-03 19:33:19

标签: python time-series

我有两个不均匀间隔的时间序列:

      time    X1
1234567000 96.32
1234567005 96.01
1234567009 96.05

      time    X2
1234567001 23.88
1234567005 23.96

我想合并它们:

      time    X1    X2
1234567000 96.32   nan
1234567001   nan 23.88
1234567005 96.01 23.96
1234567009 96.05   nan

我怎样才能在Python中这样做?我愿意使用包,例如大熊猫。

time是整数(它不是UNIX时间戳)。 X1X2是浮动的。

2 个答案:

答案 0 :(得分:2)

这是一种超级天真的合并方式。首先格式化你的两个系列,使它们是字典,定义一个行对象,然后遍历每个系列的每个元素,将它的条目添加到行对象。

from collections import defaultdict

class series_row:
    def __init__(self):
        self.x1 = 'nan'
        self.x2 = 'nan'

    def __repr__(self):
        return f"{self.x1}, {self.x2}"


series1 = {
    1234567000: 96.32,
    1234567005: 96.01,
    1234567009: 96.05,
}

series2 = {
    1234567001: 23.88,
    1234567005: 23.96
}


merged_series = defaultdict(series_row)

for k, v in series1.items():
    merged_series[k].x1 = v

for k, v in series2.items():
    merged_series[k].x2 = v

for entry in merged_series.items():
    print(entry)

答案 1 :(得分:2)

如果您想使用pandas,首先要将输入格式化为pandas数据帧,如下所示:

import pandas as pd

s1 = pd.DataFrame({
    'time':[1234567000,1234567005,1234567009],
    'X1':[96.32,96.01,96.05]
},columns=['time','X1'])  # to keep columns order

s2 = pd.DataFrame({
    'time':[1234567001,1234567005],
    'X2':[23.88,23.96]
},columns=['time','X2'])  # to keep columns order

然后简单地merge使用这一行:

df = pd.merge(s1,s2,how='outer')

如果您希望时间值为sorted,请改用:

df = pd.merge(s1,s2,how='outer').sort_values(by='time')