2016-11-22 6 views
2

Es gibt ein Datenrahmen ist, sagenmit Pandas Datenrahmen Gruppe agg Funktion

df

 Country Continent  PopulationEst 

0 Germany Europe   8.036970e+07 

1 Canada  North America 35.239865+07 
... 

ich eine dateframe erstellen möchten, die die Größe zeigt (die Zahl der Länder in allen Kontinenten) und die Summe , Mittelwert und Standardabweichung für die geschätzte Bevölkerung jedes Landes.

habe ich das folgende:

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std']) 

aber das Ergebnis df2 hat unter mehreren Ebenen Spalten wie:

df2.columns 

MultiIndex(levels=[['PopulationEst'], ['size', 'sum', 'mean', 'std']], 
      labels=[[0, 0, 0, 0], [0, 1, 2, 3]]) 

Wie kann ich die PopulationEst aus den Säulen zu entfernen, so hat nur ['size', 'sum', 'mean', 'std'] Spalten für der Datenrahmen?

Antwort

2

Ich glaube, Sie hinzufügen müssen ['PopulationEst']-agg diese Spalte für die Aggregation verwendet:

df2 = df.groupby('Continent')['PopulationEst'].agg(['size', 'sum','mean','std']) 

Probe:

df = pd.DataFrame({ 
'Country': ['Germany', 'Germany', 'Canada', 'Canada'], 
'PopulationEst': [8, 4, 35, 50], 
'Continent': ['Europe', 'Europe', 'North America', 'North America']}, 
columns=['Country','PopulationEst','Continent']) 
print (df) 
    Country PopulationEst  Continent 
0 Germany    8   Europe 
1 Germany    4   Europe 
2 Canada    35 North America 
3 Canada    50 North America 

df2 = df.groupby('Continent')['PopulationEst'].agg(['size', 'sum','mean','std']) 
print (df2) 
       size sum mean  std 
Continent         
Europe   2 12 6.0 2.828427 
North America  2 85 42.5 10.606602 

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std']) 
print (df2) 
       PopulationEst      
         size sum mean  std 
Continent          
Europe     2 12 6.0 2.828427 
North America    2 85 42.5 10.606602 

Eine andere Lösung ist mit MultiIndex.droplevel:

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std']) 
df2.columns = df2.columns.droplevel(0) 
print (df2) 
       size sum mean  std 
Continent         
Europe   2 12 6.0 2.828427 
North America  2 85 42.5 10.606602 
+0

Wenn meine oder eine andere Antwort war hilfreich, nicht vergessen [akzeptieren] (http://meta.stackexchange.com/a/5235/295067) es. Vielen Dank. – jezrael

+0

Danke! Die Ergebnisse sind genau das, was ich will. – woodb

0

Ich denke, das könnte das tun, was Sie brauchen:

grouping = {'Continent': ['size'], 'PopEst':['sum', 'mean', 'std']} 
df.groupby('Continent').agg(grouping) 
Verwandte Themen