将两个Series组合到一个大pandas的DataFrame中

我有两个系列s1s2具有相同(非连续)的索引。 如何将s1s2组合成DataFrame中的两列,并将其中一个索引保留为第三列?

我认为concat是一个很好的方法来做到这一点。 如果它们存在,它使用Series的名称属性作为列(否则它只是数字):

 In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1') In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2') In [3]: pd.concat([s1, s2], axis=1) Out[3]: s1 s2 A 1 3 B 2 4 In [4]: pd.concat([s1, s2], axis=1).reset_index() Out[4]: index s1 s2 0 A 1 3 1 B 2 4 

注意:这延伸到超过2个系列。

大pandas会自动alignment这些系列并创build联合索引它们在这里碰巧是一样的。 reset_index将索引移动到一列。

 In [2]: s1 = Series(randn(5),index=[1,2,4,5,6]) In [4]: s2 = Series(randn(5),index=[1,2,4,5,6]) In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index() Out[8]: index s1 s2 0 1 -0.176143 0.128635 1 2 -1.286470 0.908497 2 4 -0.995881 0.528050 3 5 0.402241 0.458870 4 6 0.380457 0.072251 

如果两者的索引相同,为什么不使用.to_frame呢?

 a.to_frame().join(b.to_frame()) 

示例代码:

 a = pd.Series([1,2,3,4], index=[7,2,8,9]) b = pd.Series([5,6,7,8], index=[7,2,8,9]) data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index}) 

Pandas允许您使用Series作为值和列名作为关键字来创build一个DataFrame 。 当它find一个Series的值时,它使用Series索引作为DataFrame索引的一部分。 这种数据alignment是pandas的主要特点之一。 因此,除非您有其他需求,否则新创build的DataFrame具有重复价值。 在上面的例子中, data['idx_col']data.index具有相同的数据。

不知道我完全理解你的问题,但这是你想要做什么?

 pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index) 

index=s1.index在这里甚至是不必要的)