数据集问题:
对于上图中显示的数据集,我试图找到三个人口最多的州,同时只考虑每个州的三个人口最多的县。我使用CENSUS2010POP
。
此函数应返回字符串值列表(按最高人口到最低人口的顺序)。
以下是我的代码:
x=census_df.groupby('STNAME')['CENSUS2010POP'].nlargest(3)
该声明返回一个系列,其中它将每个州的三个人口最多的县分组。
现在,我还能做些什么才能进一步找到人口最多的州?
我是否使用循环或是否有另一种有效的方法来解决这个问题?
答案 0 :(得分:1)
尝试将sum()添加到函数中:
df = pd.DataFrame({'STNAME': ['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska', 'Alaska', 'Alaska', 'Alaska','New York', 'New York', 'New York', 'New York', 'California'],
'CTYNAME': ['a', 'b', 'c', 'd', 'z', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],
'CENSUS2010POP': [120000, 230000, 89000, 43000, 23000, 34000, 120000, 10000, 1200000, 1300000, 9800000, 560000, 45000]})
x=df.groupby('STNAME')['CENSUS2010POP'].sum().nlargest(3)
输出:
STNAME
New York 12860000
Alabama 482000
Alaska 187000
Name: CENSUS2010POP, dtype: int64
答案 1 :(得分:1)
以下是我对此的看法。我知道不推荐使用iteraion生成数据帧,因此,如果有更好的建议,请共享。
fulldf3 = pd.DataFrame()
for i in census_df['STNAME'].unique():
top3=census_df[(census_df['STNAME']==i) & (census_df['SUMLEV']==50)].groupby(['STNAME','CTYNAME'])['CENSUS2010POP'].sum().nlargest(3)
dftop3=pd.DataFrame(top3)
fulldf3=fulldf3.append(dftop3)
#gives the top3 states with population sum from top3 populous counties
fulldf3['CENSUS2010POP'].sum(level=0).nlargest(3)
#gives the names of the states in a list of strings
fulldf3['CENSUS2010POP'].sum(level=0).nlargest(3).index.to_list()
输出:
答案 2 :(得分:0)
def answer_six():
county = census_df[census_df['SUMLEV']==50]
states = county.groupby('STNAME')['CENSUS2010POP'].apply(lambda x: x.nlargest(3).sum()).nlargest(3).index.values.tolist()
return states
answer_six()
答案 3 :(得分:0)
def answer_six():
lst=[];
df=census_df.groupby(['STNAME'])
df=df.sum()
for i in range(3):
fd=df['CENSUS2010POP'].max()
df_temp=df[df['CENSUS2010POP']==fd]
lst.append(df_temp.index[0])
df=df.drop(df_temp.index[0],axis=0)
return lst
answer_six()
答案 4 :(得分:0)
temp提供了州和县的数据(也保持了SUMLEV标准)
节奏为每个州提供前3名县
if index == nil || index == 7 { ...
输出
temp = census_df[census_df.SUMLEV==50].groupby(['STNAME','CTYNAME']).agg({"CENSUS2010POP":sum})
tempo = pd.DataFrame(temp['CENSUS2010POP'].groupby(level=0, group_keys=False).nlargest(3))
tempo.CENSUS2010POP.groupby(level=0, group_keys=False).sum().nlargest(3).index.tolist()