2016-03-30 4 views
1

ich einen Datenrahmen haben, die wie folgt aussieht:Pandas Gruppe von Sum Halten Sie nur eine der Index als Spalten

import pandas as pd 
group = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'] 
df = {'population': [100,200,300,400,500,600,700,800], 
     'city_name': ['Chicago', 'Chicago', 'New York', 'New York', 'Chicago', 'New York', 'Chicago', 'New York'], 
    } 
df = pd.DataFrame(df, index=group) 


    city_name population 
A Chicago  100 
A Chicago  200 
A New York 300 
A New York 400 
B Chicago  500 
B New York 600 
B Chicago  700 
B New York 800 

Jetzt habe ich die Gesamtbevölkerung durch den Index und city_name Einfach genug gruppiert finden wollen:

total = df.groupby([df.index, 'city_name']).sum() 

       population 
    city_name 
A Chicago  300 
    New York  700 
B Chicago  1200 
    New York  1400 

Problem ist dies gibt einen Multi-Level-Index (denke ich). Ich möchte den ursprünglichen Index behalten, aber city_name als Spalte behalten. Mit anderen Worten, was ich will, ist

city_name  population 
A Chicago  300 
A New York  700 
B Chicago  1200 
B New York  1400 

Jetzt kann ich erreichen, was ich will von so etwas wie

total.reset_index(inplace=True) 
total.set_index(keys='level_0', inplace=True) 

tun Da die reset_index beide Indizes nimmt und legt sie als Spalten und dann kann ich nur gesetzt einer von ihnen zurück zum Index. Gibt es einen eleganteren Weg, dies zu tun?

Danke!

Antwort

3

Ich glaube, Sie Parameter level=1-reset_index für Reseting nur zweite Ebene der multiindex hinzufügen müssen:

total.reset_index(level=1, inplace=True) 
print total 
    city_name population 
A Chicago   300 
A New York   700 
B Chicago  1200 
B New York  1400 

Oder:

total.reset_index(level='city_name', inplace=True) 
print total 
    city_name population 
A Chicago   300 
A New York   700 
B Chicago  1200 
B New York  1400 
+1

Oder können Sie die Ebenennamen zur besseren Lesbarkeit verwenden, das heißt Verwendung ' level = 'city_name'' – Marius

+0

Ja, gute Idee, danke. – jezrael

Verwandte Themen