Pandas: 如何重命名多级索引列或创建新列?
Pandas: How do I re-name a multi-level indexed column or create a new column?
我是 pandas 的新手。并且真的对处理具有多级列索引的数据框感到困惑。
我想
- 通过附加 column.iloc 重命名我的 2 级列名称:_0、_1、...
- 添加一个新列 New_Max,这是前两列的最大值。 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.from_tuples
:
创建 MultiIndex
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
新列的最后两列 select 按位置 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
我是 pandas 的新手。并且真的对处理具有多级列索引的数据框感到困惑。
我想
- 通过附加 column.iloc 重命名我的 2 级列名称:_0、_1、...
- 添加一个新列 New_Max,这是前两列的最大值。 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.from_tuples
:
MultiIndex
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
新列的最后两列 select 按位置 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