2014-02-17 18 views
7

Ich habe folgenden Datenrahmen:Transponieren Teil eines Pandas Datenrahmen

>>> df 
Out[15]: 
     group type amount number 
0 group_A buy  100  123 
1 group_A view  0  111 
2 group_B view  0  222 
3 group_A view  0  222 

würde Ich mag die Daten schwenken, so dass ich am Ende mit:

   type group_A group_B 
0 amount buy  100   0 
1 number buy  0  123 
2 number view  333  222 

Wie kann ich das erreichen?

Antwort

3

Verwendung:

df=pd.DataFrame([['group_A','buy',100,123],['group_A','view',0,111],['group_B','view',0,222],['group_A','view',0,222]],columns=['group','type','amount','number']) 

zuerst die Indizes Summe und orientieren:

>>> df = df.groupby(['type','group']).sum().transpose().stack(0).reset_index() 
>>> df 
group level_0 type group_A group_B 
0  amount buy  100  NaN 
1  amount view  0  0 
2  number buy  123  NaN 
3  number view  333  222 

Tropfen Zeilen, die alle gleich Null sind:

df = df[~((df['group_A']==0) | (df['group_B']==0))] 

Fillna suchen:

>>> df.fillna(0) 
group level_0 type group_A group_B 
0  amount buy  100  0 
2  number buy  123  0 
3  number view  333  222 

Etwas raten an ein paar Stellen hier, aber es sollte dir einen Anfang geben.

+0

Danke. Ich habe versucht, Multiindex zu verwenden, aber das ist viel einfacher. – greenafrican