对dataframe中的子索引进行排序,并对前n个条目求和

2024-09-30 02:26:15 发布

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

我有这样一个数据帧:

                    Population2010
State     County

AL        Baldwin     90332
          Douglas     92082
          Rolling     52000
CA        Orange      3879602
          San Diego   4364594
          Los Angeles 12123562
CO        Boulder     161818
          Denver      737728
          Jefferson   222368
AZ        Maricopa    2239378
          Pinal       448888
          Pima        1000564

我想把数据按人口降序排列,但也有国家的顺序

                    Population2010
State     County

AL        Douglas     92082
          Baldwin     90332
          Rolling     52000
CA        Los Angeles 12123562
          San Diego   4364594
          Orange      3879602
CO        Denver      737728
          Jefferson   222368
          Boulder     161818              
AZ        Maricopa    2239378
          Pima        1000564
          Pinal       448888

然后我想把人口数据的前两项相加,得出两个州的总和最高

'CA', 'AZ'

Tags: 数据caazstatealsandouglasorange
1条回答
网友
1楼 · 发布于 2024-09-30 02:26:15

问题1:

df.sort_values(['Population2010'], ascending=False)\
  .reindex(sorted(df.index.get_level_values(0).unique()), level=0)

或者

df.sort_values('Population2010', ascending=False)\
  .sort_index(level=0, ascending=[True])

输出:

                  Population2010
State County                     
AL    Douglas               92082
      Baldwin               90332
      Rolling               52000
AZ    Maricopa            2239378
      Pima                1000564
      Pinal                448888
CA    Los Angeles        12123562
      San Diego           4364594
      Orange              3879602
CO    Denver               737728
      Jefferson            222368
      Boulder              161818

首先,按值降序对整个数据帧进行排序,然后从level=0的索引中获取值,对它们进行排序,并使用在level=0上重新编制索引来按level=0分组对数据帧进行排序

问题2与第一个有点无关的计算:

df.groupby('State')['Population2010']\
  .apply(lambda x: x.nlargest(2).sum())\
  .nlargest(2).index.tolist()

输出:

['CA', 'AZ']

使用nlargest查找按状态和总和分组的两个最大值,然后再次使用nlargest查找这些总和的两个最大状态

相关问题 更多 >

    热门问题