【问题标题】:Using idxmax on a hierarchical dataframe在分层数据帧上使用 idxmax
【发布时间】:2018-10-18 01:11:24
【问题描述】:

我正在尝试在多索引 Pandas 数据框中查找多列中最大值的索引。

        Kommune  Upplands  Vallentuna...   Kiruna
Year    Party  
1973    M        0.9       29.2      ...   20     
        KD       15        10        ...   2 
        MP       1.1       4         ...   5     
        V        6         7         ...   8  
        SD       NaN       NaN       ...   NaN
        L        10.1      13.5      ...   8.8 
1976    M        1.8       29.2      ...   20     
        KD       16        10        ...   2 
        MP       10        4         ...   5     
        V        15        7         ...   8    
        SD       NaN       NaN       ...   NaN
        L        11.9      15        ...   18
...     ...      ...       ...       ...   ... 
...     ...      ...       ...       ...   ... 
2014    M        28        22        ...   29     
        KD       4.5       13        ...   5 
        MP       11        8         ...   9     
        V        1.9       5         ...   10    
        SD       20        10        ...   5
        L        19        25        ...   1

想要的输出是

Kommune  Upplands  Vallentuna...   Kiruna
Year      
1973     KD        M         ...   M
1976     V         M         ...   M
...      ...       ...       ...   ...
2014     M         L         ...   M  

我尝试过使用groupby(正如之前关于多索引的帖子中所建议的那样-Getting max values from pandas multiindex dataframe),但它会为每个位置返回一个元组。

Kommune  Upplands          Vallentuna        ...   Kiruna
Year      
1973     (1973, KD)        (1973, M)         ...   (1973, M)
1976     (1976, V)         (1976, M)         ...   (1976, M)
...      ...               ...               ...   ...
2014     (2014, M)         (2014, L)         ...   (2014, M)

如何仅从每个元组中获取第二个元素?或者有没有更有效的方法来查找索引?

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    看来你需要

    df.stack().sort_values().groupby(level=[0,2]).tail(1).reset_index(level=1).Party.unstack()
    Out[544]: 
         Upplands Vallentuna Kiruna
    Year                           
    1973       KD          M      M
    1976       KD          M      M
    

    【讨论】:

      【解决方案2】:

      如何只从每个元组中获取第二个元素?

      一种解决方案是通过pd.DataFrame.applymap提取每个tuple的第二个元素:

      df = pd.DataFrame([[(1, 2), (3, 4)], [(5, 6), (7, 8)]])
      
      res = df.applymap(lambda x: x[1])
      
      print(res)
      
         0  1
      0  2  4
      1  6  8
      

      或者使用功能替代:

      from operator import itemgetter
      
      res = df.applymap(itemgetter(1))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-02
        • 2014-06-22
        • 2019-09-20
        • 2022-01-15
        • 2018-10-05
        • 2018-05-06
        • 2023-03-03
        相关资源
        最近更新 更多