python - Pandas:如何重命名多级索引列或创建新列?
问题描述
我是熊猫新手。并且真的对处理具有多级列索引的数据框感到困惑。
我想要
- 通过附加 column.iloc: _0, _1, ... 重命名我的 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 |
解决方案
用于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
推荐阅读
- python - 无法将变量传递给烧瓶模板
- git - 如何撤消我的 git 标签被大写?
- julia - Julia 找到多个 argmin
- node.js - 如何使用 npm 修复和禁用 mongoose 库中的资金?
- javascript - 在表格之间切换时如何保持表格的位置不变
- javascript - 如何调用函数?ComponentDidMount 在这里不匹配
- sql - 试图从 SQL Server 的描述列中删除用户名
- c# - c# 调整面板大小后更新图形画布
- node.js - 在根 url 上运行 Firebase NextJS 应用程序功能
- git - 如何将文件/文件夹完成添加到 git 命令的fish shell?