Pandas 函数操作

Pandas function operations

提问人:Vivek 提问时间:1/9/2017 最后编辑:EdChumVivek 更新时间:10/20/2020 访问量:9432

问:

数据来自美国人口普查局。县是美国各州的政治和地理分区。此数据集包含 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()
Python 熊猫 -数据读取器

评论

2赞 EdChum 1/9/2017
这个问题不包括任何示例数据或任何过滤数据的尝试,此外,这个问题看起来像家庭作业,所以你需要在这里展示更多的努力
6赞 Laurens Koppenol 1/9/2017
你刚刚抄袭了你的家庭作业吗?
1赞 jezrael 1/9/2017
答案似乎就在这里
1赞 Albort 2/15/2017
可以确认这是一个作业问题。
1赞 Eduard3192993 9/12/2017
发布 Courserva 作业违反了 Coursera 荣誉准则。别这样

答:

2赞 dfadeeff 1/21/2017 #1

这是对我有用的答案:

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 索引对应的值,请在此处查看

评论

0赞 Eric 3/17/2017
这在我看来是错误的。根据 [co-est2015-alldata.pdf][1],COUNTY 是 FIPS 代码,它是一个变量 int。根据代码和解释,我相信您正在将这些可以 >= 1 的整数相加,这不是 1 对 1 的关系。如果 SUMLEV = 1,这里应该发生一些 +=50 的软。[1]:www2.census.gov/programs-surveys/popest/technical-documentation/......
-1赞 Terk 3/26/2017 #2
def answer_five():
    return census_df.groupby('STNAME')['CTYNAME'].count().idxmax()

评论

0赞 Donald Duck 3/26/2017
虽然此代码可以回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。
0赞 Nathan 2/26/2018 #3

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

2赞 jasonlcy91 3/6/2018 #4

只是对整个代码的更正。

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

思维过程(像在Excel中一样思考): 您要计算每个州组中的“县行”数。 首先,创建掩码/条件以选择所有(“县行”)。 然后按 对它们进行分组。 然后用于计算每个分组中的行数。SUMLEV == 50STNAME.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

0赞 Anand Krishnan 2/19/2019 #5

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

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

使用它将汇总 COUNTY 列中的所有值,我们可以从中查找具有最高 no:of 县的州。sum()idxmax()

0赞 yogs 2/20/2019 #6

def answer_five():
    county = census_df[census_df['SUMLEV']==50]
    county = county.groupby(['STNAME']).count()

    return county['SUMLEV'].idxmax(axis=0)

answer_five()

2赞 Silvis Sora 3/24/2019 #7

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

这应该有效:

census_df[census_df['SUMLEV']==50].groupby(['STNAME']).size().idxmax()
1赞 Aishwarya Kanchan 4/13/2020 #8
def answer_five():
    new_df = census_df[census_df['SUMLEV'] == 50]
    x = new_df.groupby('STNAME')
    return x.count()['COUNTY'].idxmax()


answer_five()

评论

0赞 Mark Rotteveel 4/13/2020
请不要只发布代码作为答案,还要解释您的代码是做什么的,以及它如何解决问题。带有解释的答案通常质量更高,并且更有可能吸引赞成票。
0赞 Jay Mulani 6/9/2020 #9
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()

评论

0赞 Jay Mulani 6/9/2020
简单易用