首页 > 解决方案 > Pandas:如何重命名多级索引列或创建新列?

问题描述

我是熊猫新手。并且真的对处理具有多级列索引的数据框感到困惑。

我想要

  1. 通过附加 column.iloc: _0, _1, ... 重命名我的 2 级列名
  2. 添加一个新列 New_Max,它是前 2 列的最大值。New_Max 的 0 级和 1 级名称并不重要。

谢谢

当前状态

Importance| H         | H    |
Category | Cat1       | Cat2 |
         |Total Assets| AUMs |
Firm 1   | 100        | 300  |
Firm 2   | 200        | 3400 |
Firm 3   | 300        | 800  |
Firm 4   | NaN        | 800  |

期望状态

Importance| H           | H      |
Category | Cat1         | Cat2   |
         |Total Assets_0| AUMs_1 | New_Max |
Firm 1   | 100          |  300   |  300    |
Firm 2   | 200          | 3400   |  3400   |
Firm 3   | 300          | 800    |  800    |
Firm 4   | NaN          | 800    |  800  |

标签: pythonpandasmulti-index

解决方案


用于enumerate元组的计数器MultiIndex并由以下人员创建MultiIndex.from_tuples

tups = [(a, b, f'{c}_{i}') for i, (a,b,c) in enumerate(df.columns)]

df.columns = pd.MultiIndex.from_tuples(tups)
print (df)
                   H       
                Cat1   Cat2
      Total Assets_0 AUMs_1
Firm1          100.0    300
Firm2          200.0   3400
Firm3          300.0    800
Firm4            NaN    800

Last for new column by last 2 columns 按 position by 选择它们DataFrame.iloc,提取原始最后一个元组并将最后第三个值重命名为新列名:

new = list(tups[-1])
new[2] = 'New_Max'
print (new)
['H', 'Cat2', 'New_Max']

df[tuple(new)] = df.iloc[:, -2:].max(axis=1)
print (df)

                   H               
                Cat1   Cat2        
      Total Assets_0 AUMs_1 New_Max
Firm1          100.0    300   300.0
Firm2          200.0   3400  3400.0
Firm3          300.0    800   800.0
Firm4            NaN    800   800.0

推荐阅读