我有两个不均匀间隔的时间序列:
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时间戳)。 X1
和X2
是浮动的。
答案 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')