熊猫 - 从聚合格式到长格式

时间:2014-12-03 18:36:44

标签: python pandas

如果我将从长格式转换为分组聚合格式,我只会这样做:

s = pd.DataFrame(['a','a','a','a','b','b','c'], columns=['value'])

s.groupby('value').size()

value
a        4
b        2
c        1
dtype: int64

现在,如果我想恢复该聚合并从分组格式转换为长格式,我将如何进行此操作?我想我可以遍历分组的系列并重复一次' a' 4次和' b' 2次等。

在pandas或任何其他Python包中有更好的方法吗?

感谢任何提示

3 个答案:

答案 0 :(得分:2)

也许.transform可以帮助解决这个问题:

s.set_index('value', drop=False, inplace=True)
s['size'] = s.groupby(level='value', as_index=False).transform(size)
s.reset_index(inplace=True, drop=True)
s

得到以下特性:

  value size
0     a    4
1     a    4
2     a    4
3     a    4
4     b    2
5     b    2
6     c    1

答案 1 :(得分:1)

另一种相当简单的方法是使用np.repeat(假设s2是聚合系列):

In [17]: np.repeat(s2.index.values, s2.values)
Out[17]: array(['a', 'a', 'a', 'a', 'b', 'b', 'c'], dtype=object)

In [18]: pd.DataFrame(np.repeat(s2.index.values, s2.values), columns=['value'])
Out[18]:
  value
0     a
1     a
2     a
3     a
4     b
5     b
6     c

答案 2 :(得分:0)

可能会有更清洁的东西,但这是一种方法。首先,将结果存储在数据帧中并重命名columsn。

agg = s.groupby('value').size().reset_index()    
agg.columns = ['key', 'count']

然后,构建一个框架,其中包含跟踪每个字母的计数的列。

counts = agg['count'].apply(lambda x: pd.Series([0] * x))
counts['key'] = agg['key']

In [107]: counts
Out[107]: 
   0   1   2   3 key
0  0   0   0   0   a
1  0   0 NaN NaN   b
2  0 NaN NaN NaN   c

最后,这可以融化并使空值降低以获得所需的帧。

In [108]: pd.melt(counts, id_vars='key').dropna()[['key']]
Out[108]: 
  key
0   a
1   b
2   c
3   a
4   b
6   a
9   a