【发布时间】:2017-12-25 13:37:15
【问题描述】:
我正在使用婴儿姓名数据源。数据是这样的
name sex births year
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
...
Zariyan M 5 2016
Zarren M 5 2016
Zaryn M 5 2016
我们的目的是过滤掉 2011 年及以后的年份。然后,聚合重复项,按性别分组并按降序排序。输出是这样的。
sex name births
F Emma 121375
F Sophia 117352
F Olivia 111691
F Isabella 103947
F Ava 94507
M Noah 110280
M Mason 105104
M Jacob 104722
M Liam 103250
M William 99144
我设法做到了,但我的代码确实效率低下且乏味。应该有更好的方法来做到这一点,但我不知道如何。这是我的代码。
bnames_2010 = bnames.loc[bnames['year'] > 2010]
a = bnames_2010.groupby(['sex', 'name'], sort=False)['births'].sum().reset_index()
b = a.sort(['sex', 'births'], ascending=False)
c = b.groupby('sex').head()
bnames_top5 = c.sort('sex')
print('bnames_top5')
【问题讨论】:
-
我相信你的帖子更适合codereview.stackexchange.com
-
@diegoperini 我怀疑 Code Review 是否有足够的 pandas 专家来判断这段代码是否合适。
标签: python performance pandas dataframe optimization