【问题标题】:Pandas function operationsPandas 函数操作
【发布时间】:2017-05-23 20:12:42
【问题描述】:

数据来自美国人口普查局。县是美国各州的政治和地理分区。该数据集包含 2010 年至 2015 年美国各县和州的人口数据。

哪个州的县最多? (提示:仔细考虑 sumlevel 键!以后的问题也需要这个...)

我无法从代码中提取县名。请帮忙

我的代码:

import pandas as pd
import numpy as np
census_df = pd.read_csv('census.csv')
census_df.head()
def answer_five():
    return census_df.groupby('STNAME').COUNTY.sum().max()



answer_five()

【问题讨论】:

  • 这个问题不包括任何样本数据或任何过滤数据的尝试,另外这个问题看起来像家庭作业,所以你需要在这里表现出更多的努力
  • 你只是抄作业吗?
  • 看来答案是here
  • 可以确认这是一道作业题。
  • 发布 Coursera 作业违反了 Coursera 荣誉准则。不要这样做

标签: python pandas pandas-datareader


【解决方案1】:

我们也可以使用sum()函数来做这个问题

def answer_five():
  return census_df.groupby(["STNAME"]).sum()["COUNTY"].idxmax()

使用sum() 它将汇总 COUNTY 列中的所有值,我们可以从中应用idxmax() 来找到县数最多的州。

【讨论】:

    【解决方案2】:
    import pandas as pd
    def answer_five():
        df=census_df.groupby(['STNAME'])
        df=df.sum();
        fd=df['COUNTY'].max()
        df=df[df['COUNTY']==fd]
        return df.index[0]
    answer_five()
    

    【讨论】:

    • 简单易行
    【解决方案3】:
    def answer_five():
        new_df = census_df[census_df['SUMLEV'] == 50]
        x = new_df.groupby('STNAME')
        return x.count()['COUNTY'].idxmax()
    
    
    answer_five()
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
    【解决方案4】:

    实际上,您可以只计算州级的数字,而不是查看县级的详细信息。

    这应该有效:

    census_df[census_df['SUMLEV']==50].groupby(['STNAME']).size().idxmax()
    

    【讨论】:

      【解决方案5】:
      
      def answer_five():
          county = census_df[census_df['SUMLEV']==50]
          county = county.groupby(['STNAME']).count()
      
          return county['SUMLEV'].idxmax(axis=0)
      
      answer_five()
      
      

      【讨论】:

        【解决方案6】:

        只是对整个代码的更正。

        首先,根据消息来源,SUMLEV of 50 表示该行是一个县。有两种方法可以回答这个问题。

        思考过程(像在 Excel 中一样思考): 您想计算每个州组中“县行”的数量。 首先,您创建掩码/条件以选择所有 SUMLEV == 50(“县行”)。 然后将它们按STNAME 分组。 然后用.size()统计每个分组的行数。

        # this is it!
        def answer_five():
            mask = (census_df.SUMLEV == 50)
            max_index = census_df[mask].groupby('STNAME').size().idxmax()
            return max_index
        
        # not so elegant
        def answer_five():
            census_df['Counts'] = 1
            mask = (census_df.SUMLEV == 50)
            max_index = census_df[mask].groupby('STNAME')['Counts'].sum().idxmax()
            return max_index
        

        不客气。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.size.html

        【讨论】:

          【解决方案7】:

          .max()idxmax() 的更改返回了STNAME 的正确值,而不是一个大整数。

          【讨论】:

            【解决方案8】:
            def answer_five():
                return census_df.groupby('STNAME')['CTYNAME'].count().idxmax()
            

            【讨论】:

            • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
            【解决方案9】:

            这是对我有用的答案:

            def answer_five():
                return census_df.groupby(["STNAME"],sort=False).sum()["COUNTY"].idxmax()
            

            第一部分创建聚合df

            census_df.groupby(["STNAME"],sort=False).sum()
            

            第二部分取你需要的col

            ["COUNTY"].idxmax()
            

            并返回与max索引对应的值,检查here

            【讨论】:

            • 这在我看来是错误的。根据 [co-est2015-alldata.pdf][1],COUNTY 是 FIPS 代码,它是一个变量 int。根据代码和解释,我相信您正在对这些可能 >= 1 的整数求和,这不是一对一的关系。如果 SUMLEV = 50,这里应该发生一些 +=1 的软性。[1]:www2.census.gov/programs-surveys/popest/technical-documentation/…
            猜你喜欢
            • 1970-01-01
            • 2021-06-14
            • 2017-09-06
            • 1970-01-01
            • 1970-01-01
            • 2016-09-23
            • 2022-12-22
            • 1970-01-01
            • 2017-05-23
            相关资源
            最近更新 更多