Python 在不使用多索引的情况下拆分熊猫系列
我想用一个具有单级索引的Pandas系列,并将该索引拆分为具有多列的数据帧。例如,对于输入: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
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
太好了,这正是我想要的。谢谢