2016-11-22 119 views
2

有一個數據框,說使用熊貓據幀組AGG功能

DF

 Country Continent  PopulationEst 

0 Germany Europe   8.036970e+07 

1 Canada  North America 35.239865+07 
... 

我想創建顯示尺寸(國家在各大陸數)dateframe,並且總和,意味着每個國家的人口估計偏差。

我做了以下內容:

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

但結果DF2類似下面有多個級別列:

df2.columns 

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

我怎樣才能把列PopulationEst,所以纔有了['size', 'sum', 'mean', 'std']列數據幀?

回答

2

我認爲你需要添加['PopulationEst'] - agg使用此列聚集:

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

樣品:

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 

另一種解決方案是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

如果我或另一種答案是有幫助的,不要忘了[接受](http://meta.stackexchange.com/a/5235/295067 )它。謝謝。 – jezrael

+0

謝謝!結果正是我想要的。 – woodb

0

我認爲這可能做你的需要:

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