2013-05-22 2 views
0

Я массирую в dataframe так это выглядит следующим образом:Панда стек разборки стопки сводного иерархический индекс - перекроить dataframe

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

Я хотел бы преобразовать его, так это выглядит следующим образом:

123789CDE... 
4560ABFGH,,, 

модели заключается в следующем:

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

То есть, я взять две строки и конкатенации следующие две строки, и т.д., так что получить широкий д ataframe.

Но мой реальный фреймворк данных - это не три столбца, это может быть 50 столбцов и, возможно, 100 000 строк, поэтому мой фреймворк размером 100 000 x 50. Я хочу взять 100 строк и конкатенировать следующие 100 строк и т. Д., Поэтому я получаю широкий фреймворк размером 100 х (50 * 100 000/100) = 100 х 50 000.

Can Pandas сделать это? Моя цель - сделать некоторые вычисления на каждой из этих 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 ,, , Спасибо, что научи меня об «групповом», что лучше. Однако «сгруппированный» объект DataFrameGroupBy. Я бы хотел, чтобы «сгруппированный» был обычным объектом DataFrame, с которым я могу работать. Теперь «сгруппированный» объект - это DataFrameGroupBy, с которым я не знаю, как работать. Например, он не имеет .ix (...). Могу ли я преобразовать «сгруппированные» в DataFrame? – user2186859

+0

PS. Спасибо за помощь. Я очень признателен, что ты указал мне в правильном направлении! :) – user2186859

+0

У меня есть решение groupby() для работы, но я не могу работать с отдельными группами. Мне нужно смотреть на все группы одновременно. Поэтому я хотел бы иметь очень широкий DataFrame, как это: Group1 | Группа2 | ... | Groupn (где каждая группа состоит из 100 строк, объединенных следующей группой и т. Д., Поэтому все группы охватывают столбцы) И теперь я посмотрю на первую строку (которая охватывает каждую группу) и запустит некоторые функции в каждой строке. Как мне это сделать? – user2186859

Смежные вопросы