【发布时间】:2017-04-05 12:18:00
【问题描述】:
我有一个来自美国的人口普查数据的 pandas dataframe。列包括STNAME(州名)CTYNAME(县名)以及按年份在人口普查报告中收集的不同数据的许多列。
我正在寻找人口最多的 3 个州,仅包括每个州人口最多的 3 个县。
这是我当前的代码,它稍微整理了原始数据帧,只包含与问题相关的内容:
def answer():
census_df50 = census_df[census_df['SUMLEV'] == 50]
columns = ['STNAME', 'CTYNAME', 'CENSUS2010POP']
c = census_df50[columns]
return c
print(answer())
下面是终端打印的数据框示例:
STNAME CTYNAME CENSUS2010POP
1 Alabama Autauga County 54571
2 Alabama Baldwin County 182265
3 Alabama Barbour County 27457
4 Alabama Bibb County 22915
5 Alabama Blount County 57322
6 Alabama Bullock County 10914
7 Alabama Butler County 20947
8 Alabama Calhoun County 118572
它是按州和县的字母顺序列出的,所以这只按县名显示阿拉巴马州的人口普查数据,但数据框中有 3000 多行(每个县一个,州有多个条目)
我的方法是编写一个函数,根据 CENSUS2016POP 的值(代表 2010 年人口的整数)在 CTYNAME 中查找前 3 个县,为 STNAME 列中的每个州。然后让函数按照此标准将名称作为前 3 个状态的字符串返回。但是,对于如何实现这一点非常迷茫。
我很确定我应该尝试使用.groupby()、.set_index() 和 .nlargest() 这些函数的组合。
任何帮助将不胜感激!
【问题讨论】:
-
如果您以后可以发布数据样本,那就太好了。
标签: python sorting pandas dataframe