提问人:Vivek 提问时间:1/9/2017 最后编辑:EdChumVivek 更新时间:10/20/2020 访问量:9432
Pandas 函数操作
Pandas function operations
问:
数据来自美国人口普查局。县是美国各州的政治和地理分区。此数据集包含 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()
答:
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 == 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
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
简单易用
评论