Python pandas группируются по двум столбцам

#python #pandas #dataframe #group-by

#python #pandas #фрейм данных #группировка по

Вопрос:

У меня есть фрейм данных pandas:

        code   type
index  
  312   11     21
  312   11     41 
  312   11     21
  313   23     22
  313   11     21
  ...   ...    
 

Поэтому мне нужно сгруппировать его по количеству пар столбцов «код» и «тип» для каждого элемента индекса:

         11_21   11_41  23_22
index  
  312       2      1      0
  313       1      0      1
  ...   ...   
 

Как реализовать это с помощью python и pandas?

Ответ №1:

Вот один из способов использования pd.crosstab , а затем переименования имен столбцов, используя информацию об уровнях.

 In [136]: dff = pd.crosstab(df['index'], [df['code'], df['type']])

In [137]: dff
Out[137]:
code  11    23
type  21 41 22
index
312    2  1  0
313    1  0  1

In [138]: dff.columns = ['%s_%s' % c for c in dff.columns]

In [139]: dff
Out[139]:
       11_21  11_41  23_22
index
312        2      1      0
313        1      0      1
 

В качестве альтернативы, менее элегантно, создайте еще один столбец и используйте перекрестную таблицу.

 In [140]: df['ct'] = df.code.astype(str)   '_'   df.type.astype(str)

In [141]: df
Out[141]:
   index  code  type     ct
0    312    11    21  11_21
1    312    11    41  11_41
2    312    11    21  11_21
3    313    23    22  23_22
4    313    11    21  11_21

In [142]: pd.crosstab(df['index'], df['ct'])
Out[142]:
ct     11_21  11_41  23_22
index
312        2      1      0
313        1      0      1