2016-10-16 6 views
0

у меня есть панд dataframe:Python панд группы двумя колоннами

 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 
Смежные вопросы