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