Python 在不使用多索引的情况下拆分熊猫系列

Python 在不使用多索引的情况下拆分熊猫系列,python,split,pandas,reshape,series,Python,Split,Pandas,Reshape,Series,我想用一个具有单级索引的Pandas系列,并将该索引拆分为具有多列的数据帧。例如,对于输入: s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c']) s a 10 a 11 b 12 b 13 c 14 c 15 c 16 dtype: int64 我想要的输出是: a b c 0 10 12 14 1 11 13 15 2 Na

我想用一个具有单级索引的Pandas系列,并将该索引拆分为具有多列的数据帧。例如,对于输入:

s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])

s
a    10
a    11
b    12
b    13
c    14
c    15
c    16
dtype: int64
我想要的输出是:

    a    b    c
0   10   12   14
1   11   13   15
2   NaN  NaN  16
我不能直接使用unstack命令,因为它需要一个多索引,而我只有一个级别索引。我尝试输入一个所有索引都具有相同值的虚拟索引,但出现了一个错误“ReformateError:index包含重复项,无法重塑”


我知道这有点不寻常,因为1)pandas不喜欢参差不齐的数组,因此需要填充,2)索引需要任意重置,3)在知道最长列的长度之前,我无法真正“初始化”数据帧。但这似乎仍然是我应该能够做的事情。我还考虑过通过groupby来实现这一点,但似乎没有任何类似分组的函数,没有任何类型的聚合函数——可能是出于上述原因

不确定这有多普遍。我称之为groupby via concat模式。 本质上是一个apply,但可以控制它的组合方式

In [24]: s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])

In [25]: df = DataFrame(dict(key = s.index, value = s.values))

In [26]: df
Out[26]: 
  key  value
0   a     10
1   a     11
2   b     12
3   b     13
4   c     14
5   c     15
6   c     16

In [27]: concat(dict([ (g,Series(grp['value'].values)) for g, grp in df.groupby('key') ]),axis=1)
Out[27]: 
    a   b   c
0  10  12  14
1  11  13  15
2 NaN NaN  16

您可以使用
groupby
apply
reset\u index
创建多索引系列,然后调用
unstack

import pandas as pd
s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])
df = s.groupby(level=0).apply(pd.Series.reset_index, drop=True).unstack(0)
print df
输出:

   a   b   c
0  10  12  14
1  11  13  15
2 NaN NaN  16

太好了,这正是我想要的。谢谢