在分层数据帧上使用idxmax

时间:2018-10-17 16:39:43

标签: python pandas multi-index

我正在尝试在多索引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)

如何从每个元组中仅获取第二个元素?还是有找到索引的更有效方法?

2 个答案:

答案 0 :(得分:2)

似乎需要

<tr th:each = "buchung : ${buchungen}">
<td th:text="${buchung.guests}" ></td>

答案 1 :(得分:0)

  

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

一种解决方案是通过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))