如何在Pandas中合并两个系列?

10

我有以下内容:

s1 = pd.Series([1, 2], index=['A', 'B'])

s2 = pd.Series([3, 4], index=['C', 'D'])

我希望将s1s2组合成s3,其结果为:

s3 = pd.Series([1, 2, 3, 4], index=['A', 'B', 'C', 'D'])

NB:没有索引重叠。


你可以使用 concat 进行合并:pd.concat([s1,s2]),但是你需要一个真正的 merge 吗?比如 s1.to_frame().merge(s2.to_frame(), how='outer')?这里的问题是,除非你添加列名,否则系列将没有列名。 - EdChum
什么是真正的合并? - Suminda Sirinath S. Dharmasena
不只是想要将两者合并成一组大系列。 - Suminda Sirinath S. Dharmasena
一个真正的合并,就像合并索引和/或列值一样。 - EdChum
索引中没有重叠。您可以忽略它。 - Suminda Sirinath S. Dharmasena
3个回答

7

您可以使用concat()函数,它会自动执行外连接操作:

pd.concat([s1, s2])

结果:

A    1
B    2
C    3
D    4
dtype: int64

根据文档,与追加相比,这对于多个系列也更有效率: “迭代地向系列追加可能比单个连接更具计算密集性。更好的解决方案是将值追加到列表中,然后一次性将列表与原始系列连接起来。” - sitnarf

3

@EdChum的解决方案很好,但是如果您不需要担心索引对齐,那么numpy堆叠更快。

In [18]: pd.DataFrame( np.hstack((s1.values, s2.values))  , index=np.hstack((s1.index.values, s2.index.values)))
Out[18]: 
   0
A  1
B  2
C  3
D  4

In [19]: %timeit pd.concat([s1, s2])

1000 loops, best of 3: 1.31 ms per loop

In [21]: %timeit pd.DataFrame( np.hstack((s1.values, s2.values)  ), index=np.hstack((s1.index.values, s2.index.values)))

10000 loops, best of 3: 214 µs per loop

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接