我想将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()这样的东西没有任何聚合函数 - 可能是出于上述原因。
答案 0 :(得分:2)
您可以使用groupby
,apply
,reset_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