2016-09-13 4 views
3

У меня есть кадр данных, который имеет формат:панды - Изменение формата кадра данных

level_0 level_1 counts 
0 back not_share 1183 
1 back share 1154 
2 back total 2337 
3 front not_share 697 
4 front share 1073 
5 front total 1770 
6 left not_share 4819 
7 left share 5097 
8 left total 9916 
9 other not_share 2649 
10 other share 2182 
11 other total 4831 
12 right not_share 1449 
13 right share 1744 
14 right total 3193 

Я хочу, чтобы преобразовать эту форму

level_0 share not_share total 
back 1154 1183  2337 
front 1073 697  1770 

и так далее ..

Есть ли какой-либо метод, который я могу использовать, или должен ли я преобразовать его в собственный тип данных Python, а затем делать манипуляции?

ответ

4

Использование groupby и sum

df.groupby(['level_0', 'level_1']).counts.sum().unstack() 

enter image description here

+1

Хмм, это интересная (необычная) метод! – MaxU

+1

@MaxU для более мелких 'df' s, это, кажется, быстрее. Для гораздо больших (миллионы строк) оба метода кажутся ровными. – piRSquared

3

вы можете использовать pivot_table() метод:

In [101]: df.pivot_table(index='level_0', columns='level_1', values='counts', aggfunc='sum') 
Out[101]: 
level_1 not_share share total 
level_0 
back   1183 1154 2337 
front   697 1073 1770 
left   4819 5097 9916 
other   2649 2182 4831 
right   1449 1744 3193 
Смежные вопросы