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

2024-04-24 07:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

      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是浮点数。你知道吗


Tags: 间隔time时间unix序列整数nanx1
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')

这里有一个非常简单的合并方法。首先格式化两个系列,使它们成为字典,定义一个行对象,然后遍历每个系列的每个元素,将其条目添加到行对象中。你知道吗

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)

相关问题 更多 >