查找具有最大行数的索引

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()

以上是关于查找具有最大行数的索引的主要内容,如果未能解决你的问题,请参考以下文章

在 Java JDBC 中查找行数的正确方法

如何构建具有特定行数的表格视图?

请教 :SQL 表有没有最大行数的限制

具有 3 列和未声明行数的 2D 向量

如何在 NativeScript 中创建具有动态行数和列数的表?

如何读取具有不同数字行数的文件