Python DataFrame:如何在Datafram上进行多次操作后继续按分组

2024-10-04 01:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含州、县和人口统计数据的数据框架,包括以下列:

SUMLEV  REGION  DIVISION  STATE  COUNTY   STNAME  CTYNAME CENSUS2010POP  

在下面的一行中,我对数据框进行分组,并对每个州的县人口进行排序

sorted_df = temp_df.groupby(['STNAME']).apply(lambda x: x.sort_values(['CENSUS2010POP'], ascending = False))

分类后,我只想保持3个最大的县人口明智

largestcty = sorted_df.groupby(['STNAME'])["CENSUS2010POP"].nlargest(3)

作为下一步,我想用下面的命令对这些值求和

top3sum = largestcty.groupby(['STNAME']).sum()

但现在的问题是,关键字'STNAME'不在groupby后面的序列中。我的问题是如何保存序列中原始数据帧的密钥?你知道吗

所以在应用了这个答案之后,我将top3sum作为一个数据帧

top3sum = pd.DataFrame(largestcty.groupby(['STNAME'])'STNAME','CENSUS2010POP'].sum(),columns =['CENSUS2010POP'])
top3sum[:8]

>>> STNAME CENSUS2010POP
Alabama 1406269 Alaska 478402 Arizona 5173150 Arkansas 807152 California 15924150 Colorado 1794424 Connecticut 2673320 Delaware 897934

这就是top3sum数据的样子,然后我得到:
cnty = top3sum['CENSUS2010POP'].idxmax()

cnty = California 但是当我尝试使用cnty和top3sum['STNAME']时,我收到了一个密钥错误


Tags: 数据df密钥序列统计数据sum人口sorted
1条回答
网友
1楼 · 发布于 2024-10-04 01:28:27

您的问题是,在第二次分组之后,只选择列CENSUSxxx,然后选择三个最大的值。你知道吗

请注意,在应用nlargest之前不需要预先排序,因此第一个命令是不必要的。但是,如果进行排序,则可以轻松地选取已排序的分组数据帧的前3行:

largestcty = temp_df.groupby(['TNAME']).apply(lambda x: x.sort_values(['CENSUS2010POP'], ascending = False).head(3)

然后需要采用sum命令来选择所需的列:

top3sum = largestcty.groupby(['STNAME'])['CENSUS2010POP'].sum()

相关问题 更多 >