我有一个如下所示的数据框:
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接受两个索引并将它们作为列放置,然后我可以将其中一个设置回索引。有更优雅的方式吗?
谢谢!
答案 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