2013-05-22 88 views
0

我有按摩一個數據幀,所以它看起來是這樣的:熊貓堆棧拆散透視分層索引 - 重塑數據幀

123 
456 
789 
0AB 
CDE 
FGH 
... 
,,, 

我想改變它,所以它看起來是這樣的:

123789CDE... 
4560ABFGH,,, 

模式是這樣的:

123 789 CDE ... 
456 0AB FGH ,,, 

也就是說,我拿兩行並連接下兩行等,所以我得到一個寬的d ataframe。

但我真正的數據幀不是三列,它可能是50列,可能是100,000行,所以我的數據幀是100,000 x 50大。我想採取100行,並連接下100行等,所以我得到一個尺寸爲100 x(50 * 100,000/100)= 100 x 50,000的寬數據框。

大熊貓可以做到嗎?我的目標是對這100行中的每一行進行一些計算。或者是分層索引更好?

回答

1
shell [33]>>> df 
     [33]>>> 
    0 
0 123 
1 456 
2 789 
3 0AB 
4 CDE 
5 FGH 
6 ... 
7 ,,, 

shell [34]>>> pd.DataFrame(df.values.reshape(4, 2)).sum() 
     [34]>>> 
0 123789CDE... 
1 4560ABFGH,,, 
dtype: object 

另一種方法是使用groupby。

shell [35]>>> df['group'] = 0 

shell [36]>>> df[1::2]['group'] = 1 

shell [37]>>> grouped = df.groupby('group') 

shell [38]>>> grouped.sum() 
     [38]>>> 
        0 
group 
0  123789CDE... 
1  4560ABFGH,,, 

也許值得研究不要創建一個新的框架,而是直接在組上工作?當然對於多列和龐大的行數。

shell [39]>>> for key, group in grouped: 
    print key 
    print group 
     ....: 
0 
    0 group 
0 123  0 
2 789  0 
4 CDE  0 
6 ...  0 
1 
    0 group 
1 456  1 
3 0AB  1 
5 FGH  1 
7 ,,,  1         
+0

您使用「reshape()」的方法不會給出您給出的輸出 。它提供了: >> ...重塑(10,2) 123 456 789 0AB CDE FGH ... ,,, 代替: 123 789 CDE ... 456 0AB FGH ,, , 謝謝你教我關於「groupby」的更好。 但是,「分組」是一個DataFrameGroupBy對象。我想「分組」是我可以使用的普通DataFrame對象。現在,「分組」對象是一個DataFrameGroupBy,我不知道如何使用它。它沒有.ix(...)方法,例如。我可以將「分組」轉換爲DataFrame嗎? – user2186859

+0

PS。感謝您的幫助。我真的很感謝你指出我正確的方向! :) – user2186859

+0

我有groupby()解決方案的工作,但我不能與個人組合作。我需要同時查看所有組。因此,我想要這樣一個非常寬的數據框: Group1 | Group2 | ... | Groupn(其中每個組由100行組成,並由下一個組等級連接,因此所有組都跨越列) 現在,我將查看第一行(跨越每個組),並在每行上運行一些函數。我應該怎麼做? – user2186859