Pandas Group By Sum只保留一个Index作为列

时间:2016-03-30 05:42:29

标签: python pandas

我有一个如下所示的数据框:

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

现在我想找到按索引分组的总人口数和city_name足够简单:

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

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

问题是这会返回一个多级索引(我认为)。我想要的是保留原始索引,但将city_name保留为列。换句话说,我想要的是

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

现在我可以通过做像

这样的事情来实现我的目标
total.reset_index(inplace=True)
total.set_index(keys='level_0', inplace=True)

由于reset_index接受两个索引并将它们作为列放置,然后我可以将其中一个设置回索引。有更优雅的方式吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为您需要将参数level=1添加到reset_index,以便只重置第二级multiindex

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

或者:

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
相关问题