【问题标题】: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 失败。为什么''中的函数是唯一的?

标签: python pandas data-science


【解决方案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()
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 2020-02-27
  • 1970-01-01
  • 2020-10-14
  • 2013-06-12
  • 1970-01-01
  • 2018-02-07
  • 2012-01-19
相关资源
最近更新 更多