【问题标题】:Pandas: How to set index to a column value, group columns, and return values [duplicate]Pandas:如何将索引设置为列值、分组列和返回值[重复]
【发布时间】:2022-01-21 05:17:28
【问题描述】:

我有一个如下的df:

         State  Country   Pop       GDP
   1     MD     USA        433100   1222
   2     TX     USA        99934123 324234
   3     B.C.   MEX        324599   5343
   4     OAX    MEX        43322    986
   5     BC     CAN        3431     643
   6     NS     CAN        8749     3535

我想按国家/地区分组并找到最大 GDP 和最小 GDP,并返回它以及新的列名,使其看起来像这样:

      PoorState   GDP    Pop       RichState   GDP      Pop
USA   MD          1222   433100    TX          324234   99934123
MEX   OAX         986    43322     B.C.        5343     324599
... 

我已经试过这个来获得每个状态的最小值和最大值:

df.groupby('state').agg({'GDP':min, 'GDP':max})[['GDP','GDP']].reset_index()

但只有最小值有效,而最大值无效。

  State   GDP    GDP
  MD      1222   1222
  OAX     986    986

-- 我知道我可以这样做来设置索引: newdf = df.set_index('region')

我想我正在尝试弄清楚我是否可以在一行中完成所有这些操作。

【问题讨论】:

    标签: python pandas dataframe numpy


    【解决方案1】:

    我们可以用rank 做groupby 创建类别然后pivot

    df['new'] =  df.groupby('Country')['GDP'].rank().map({1:'Poor',2:'Rich'})
    out = df.pivot(index='Country',columns = 'new').sort_index(level=1,axis=1)
    out.columns = out.columns.map('_'.join)
    out.reset_index(inplace=True)
    out
    Out[348]: 
      Country  GDP_Poor  Pop_Poor State_Poor  GDP_Rich  Pop_Rich State_Rich
    0     CAN       643      3431         BC      3535      8749         NS
    1     MEX       986     43322        OAX      5343    324599       B.C.
    2     USA      1222    433100         MD    324234  99934123         TX
    

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2021-10-26
      • 1970-01-01
      • 2019-08-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2014-10-12
      相关资源
      最近更新 更多