2015-05-15 5 views
0

У меня есть рамка данных pandas, которая выглядит как одна длинная строка.Reshape (stack) pandas dataframe на основе предопределенного количества строк

  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 
________________________________________________________________________________________________ 
2010 | 0.1 0.5 0.5 0.7 0.5 0.5 0.5 0.5 0.9 0.5 0.5 0.8 0.3 0.3 0.6 

Я хотел бы изменить его, как:

  0  1  2  3  4  
____________________________________ 
    |0| 0.1 0.5 0.5 0.7 0.5 
2010 |1| 0.5 0.5 0.5 0.9 0.5 
    |2| 0.5 0.8 0.3 0.3 0.6 

Я могу, конечно, сделать это с помощью цикла, но я предполагаю, (un)stack и/или pivot может быть в состоянии сделать трюк, но Я не мог понять, как ...

Симметрия/заполнение пробелов - если данные не являются целыми числами, делящимися на количество строк после отладки - на данный момент это не важно.

EDIT:

Я закодированы до решения петли между тем:

df=my_data_frame 
dk=pd.DataFrame() 
break_after=3 
for i in range(len(df)/break_after): 
    dl=pd.DataFrame(df[i*break_after:(i+1)*break_after]).T 
    dl.columns=range(break_after) 
    dk=pd.concat([dk,dl]) 
+0

Будет ли несколько индексов? Например. 2010,2011,2012 .... –

+0

нет, всего один индекс – csaladenes

ответ

1

Если имеется только один индекс (2010), это будет работать нормально.

df1 = pd.DataFrame(np.reshape(df.values,(3,5))) 
df1['Index'] = '2010' 
df1.set_index('Index',append=True,inplace=True) 
df1 = df1.reorder_levels(['Index', None]) 

Выход:

  0 1 2 3 4 
Index       
2010 0 0.1 0.5 0.5 0.7 0.5 
     1 0.5 0.5 0.5 0.9 0.5 
     2 0.5 0.8 0.3 0.3 0.6 
Смежные вопросы