2016-10-16 3 views
0

ich Pandas Datenrahmen haben:Python Pandas Gruppe von zwei Säulen

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

Also muss ich zu einer Gruppe durch Zählung von Paaren ‚Code‘ und ‚Typ‘ Spalten für jeden Indexpunkt:

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

Wie implementieren Sie es mit Python und Pandas?

Antwort

1

Hier ist eine Möglichkeit mit pd.crosstab und dann umbenennen Spaltennamen mit Ebenen Informationen.

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 

Alternativ weniger elegant, eine weitere Spalte erstellen und Kreuztabellen- verwenden.

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 
Verwandte Themen