Pandas 将元组作为索引的序列串联在多索引中

Pandas 将元组作为索引的序列串联在多索引中,pandas,tuples,concat,Pandas,Tuples,Concat,我有两个以元组为索引的序列。这两个系列有一些共同的索引,但不是全部 当我尝试将它们(并排)连接起来时,得到的数据帧有一个多索引,而不是元组。如何使生成的数据帧将时间序列索引的并集作为元组作为索引 (注意:如果两个系列具有完全相同的元组索引,则生成的数据帧也具有元组作为索引) 方法1 加入 ts1.to_frame('ts1').join(ts2.to_frame('ts2'), how='outer') ts1 ts2 (a, A) 0.174646

我有两个以元组为索引的序列。这两个系列有一些共同的索引,但不是全部

当我尝试将它们(并排)连接起来时,得到的数据帧有一个多索引,而不是元组。如何使生成的数据帧将时间序列索引的并集作为元组作为索引

(注意:如果两个系列具有完全相同的元组索引,则生成的数据帧也具有元组作为索引)

方法1
加入

ts1.to_frame('ts1').join(ts2.to_frame('ts2'), how='outer')

             ts1       ts2
(a, A)  0.174646  0.180041
(b, B)  0.674112  0.246414
(c, C)  0.101622  0.142237
(d, D)  0.079782  0.097109
(e, E)  0.613248  0.389077
(f, F)       NaN  0.226176
方法2
重新分配您的
索引

df = pd.concat([ts1, ts2], axis=1)
df.index = df.index.to_series()
df

               0         1
(a, A)  0.174646  0.180041
(b, B)  0.674112  0.246414
(c, C)  0.101622  0.142237
(d, D)  0.079782  0.097109
(e, E)  0.613248  0.389077
(f, F)       NaN  0.226176
方法3
合并

ts1.reset_index().merge(
    ts2.reset_index(), on=['index'], how='outer').set_index('index')

             0_x       0_y
index                     
(a, A)  0.174646  0.180041
(b, B)  0.674112  0.246414
(c, C)  0.101622  0.142237
(d, D)  0.079782  0.097109
(e, E)  0.613248  0.389077
(f, F)       NaN  0.226176
解决方案是将
索引
转换为
元组的
列表

df = pd.concat([ts1, ts2], axis = 1, keys=['ts1','ts2'])
df.index = df.index.values
print (df)
             ts1       ts2
(a, A)  0.407183  0.866382
(b, B)  0.069167  0.975522
(c, C)  0.697429  0.855803
(d, D)  0.453543  0.011714
(e, E)  0.722056  0.359978
(f, F)       NaN  0.729991

感谢迄今为止提供的良好答案。你能解释一下上述行为的原因吗?这是一个对您有意义的设计选择,还是仅仅是实现中的一个缺点?在我看来,只要指定了
join=internal
,那么无论2个系列的长度有多大差异,
concat
都知道如何处理它们的索引(保持它们的tupleize结构完好无损)。基本上,它检查两个索引的交点,并将它们并排放置。但当提供了
join=outer
时,它开始在看到不重叠的索引时挣扎,并作为预防措施将它们强制为单独的多个索引。请注意,这两个
DF产生的
没有物理上的区别,只是一个保留了它的结构,而另一个没有。
df = pd.concat([ts1, ts2], axis = 1, keys=['ts1','ts2'])
df.index = df.index.values
print (df)
             ts1       ts2
(a, A)  0.407183  0.866382
(b, B)  0.069167  0.975522
(c, C)  0.697429  0.855803
(d, D)  0.453543  0.011714
(e, E)  0.722056  0.359978
(f, F)       NaN  0.729991