在没有多索引的情况下拆分Pandas系列

时间:2013-07-02 18:10:47

标签: 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   NaN  NaN  16

我无法直接使用unstack命令,因为它需要一个多索引,而我只有一个单级索引。我尝试输入一个所有具有相同值的虚拟索引,但我收到错误“ReshapeError:索引包含重复的条目,无法重新形成”。

我知道这有点不寻常,因为1)pandas不喜欢粗糙的数组,所以需要填充,2)索引需要任意重置,3)我不能真正“初始化“数据框,直到我知道最长的列有多长。但这似乎仍然是我应该以某种方式做的事情。我也考虑过通过groupby来做这件事,但似乎没有像datase_df.values()这样的东西没有任何聚合函数 - 可能是出于上述原因。

2 个答案:

答案 0 :(得分:2)

您可以使用groupbyapplyreset_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

答案 1 :(得分:0)

不确定这是多么普遍。我通过concat模式将其称为groupby。 基本上是一种应用,但可以控制它的组合方式。

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