查找具有最大行数的索引
Posted
技术标签:
【中文标题】查找具有最大行数的索引【英文标题】:Finding the Index with maximum number of rows 【发布时间】:2019-11-14 22:35:00 【问题描述】:我的任务:
对于下一组问题,我们将使用来自United States Census Bureau 的人口普查数据。县是美国各州的政治和地理分区。此数据集包含 2010 年至 2015 年美国各县和州的人口数据。See this document 了解变量名称的说明。
人口普查数据集 (census.csv) 应作为 census_df 加载。酌情使用这个回答问题。
问题 5
哪个州的县最多? (提示:仔细考虑sumlevel
键!您在以后的问题中也需要这个...)
这个函数应该返回一个字符串值。
census_df = pd.read_csv('census.csv')
census_df = census_df[census_df['SUMLEV']==50]
census_df_2 = census_df.groupby(by='STNAME',axis=0)
然而,这不按'STNAME'
对DataFrame进行分组,在执行census_df_2.head()
时可以看到
我想这应该适用于分组的 DataFrame:
def answer_five():
return census_df_2[ census_df_2['COUNTY'].count() == max( census_df_2['COUNTY'].count() ) ].index().tolist()[0]
answer_five()
为什么 groupby 函数不起作用?我尝试更改轴并改用 set_index()
函数,但我无法让它起作用。
如果有人知道解决此问题的另一种方法,我将不胜感激。
【问题讨论】:
啊,这听起来很像家庭作业或培训问题。您甚至粘贴了提示:-) 您的意思是,该组不起作用?您是否已经尝试过应用聚合?例如类似 census_df.groupby(by='STNAME').aggregate('county': 'nunique') 分组做了一些奇怪的事情。当我执行census_df_2.groupby('STNAME').head()
时,它不会返回按状态名称分组的前五个元素,而是按索引返回原始数据帧,但仅返回索引 1-5、69-73,99-103,115-119,... 3170-3174,似乎随机选择索引。我没有尝试过,尽管我确实在某些时候使用过 .agg 失败。为什么''中的函数是唯一的?
【参考方案1】:
groupby
只返回一个 groupby 对象,您必须指定一个用于该对象的聚合函数,例如
df.groupby(by='STNAME').aggregate('COUNTY': 'nunique').idxmax()[0]
给予
'Texas'
有关分组/聚合的介绍,请参阅 the pandas docs here。
【讨论】:
谢谢。我只是想出了这样的解决方案,虽然我不知道为什么 groupby 之前表现得很奇怪: census_df.groupby('STNAME').count()['COUNTY'].idxmax()以上是关于查找具有最大行数的索引的主要内容,如果未能解决你的问题,请参考以下文章