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()
我有一个包含州、县和人口统计数据的数据框,其中包含以下几列:
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()