2014-12-03 44 views
0

如果我想從一個長格式去分組彙總格式,我只想做:大熊貓 - 從彙總格式要長格式

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次等。

有沒有更好的方式在熊貓或任何其他Python包中執行此操作?

感謝任何提示

回答

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 
+0

乾杯,就是我以後的事! – cjsekl 2014-12-05 22:08:47

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 
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