Python DataFrame:如何在对Dataframe进行多次操作后继续分组

Python DataFrame: How to continue grouping by after several operation on Dataframe

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

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()

但是现在的问题是key'STNAME'不在group by之后的series中。我的问题是如何在系列中保留原始DataFrame的键?

所以在应用答案后我有 top3sum 作为数据框

top3sum = pd.DataFrame(largestcty.groupby(['STNAME'])'STNAME','CENSUS2010POP'].sum(),列=['CENSUS2010POP'])<br> top3sum[:8]

>>> STNAME 人口普查 2010POP<br> 阿拉巴马州 1406269 阿拉斯加 478402 亚利桑那州 5173150 阿肯色州 807152 加利福尼亚州 15924150 科罗拉多州 1794424 康涅狄格州 2673320 特拉华州 897934

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

cnty = California 但是然后尝试将 cnty 与 top3sum['STNAME'] 一起使用时,我收到一个关键错误

您的问题是,在第二次分组后,您只 select 列 CENSUSxxx 并选择三个最大值。

请注意,在应用nlargest之前不需要提前排序,所以第一个命令是不必要的。但是如果你排序,你可以很容易地选择排序分组数据帧的前 3 行:

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

然后您需要采用 sum 命令才能select您想要的列:

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