将两个Series组合到一个大pandas的DataFrame中
我有两个系列s1
和s2
具有相同(非连续)的索引。 如何将s1
和s2
组合成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
在这里甚至是不必要的)