如何将索引级别转换为多级别列中的新级别 (Pandas)
How can I transform a level of index into new level in Multi level column (Pandas)
我有以下数据帧 dfg(这是先前聚合的结果)。
F-1 F-2
dataset Model
G Baseline 0.971 0.967
Version2 0.971 0.967
H Baseline 0.780 0.762
Version2 0.800 0.777
S Baseline 0.401 0.320
Version2 0.453 0.365
T Baseline 0.881 0.825
Version2 0.989 0.985
我想要的是获得我的数据框的以下组织:
Baseline Version2
dataset F-1 F-2 F-1 F-2
G 0.971 0.967 0.971 0.967
H 0.780 0.762 0.800 0.777
S 0.401 0.320 0.453 0.365
T 0.881 0.825 0.989 0.985
我尝试了几种方法,但我认为最好的解决方案总是给我错误。我最“合乎逻辑”的解决方案是:
- 重置索引(将 'Model' 提取到列中);
- 从元组创建多级列;
- 将列更改为多级列。
像这样:
dfg.reset_index(inplace=True, level=['Model']
new_cols = [('Baseline', 'F-1'), ('Baseline', 'F-2'), ('Version2', 'F-1'), ('Version2', 'F-2')]
multi_cols = pd.MultiIndex.from_tuples(new_cols, names=('Model', 'Measure'))
但我收到以下错误:
ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
我知道这很原始,但我找不到任何可以解释如何从现有数据帧构建多级列的来源。
使用DataFrame.stack
with Series.unstack
, last clean columns names by DataFrame.rename_axis
:
#last previous, last levels
df = df.stack().unstack([-2,-1]).rename_axis((None, None), axis=1)
#or second and third levels
#df = df.stack().unstack([1,2]).rename_axis((None, None), axis=1)
print (df)
Baseline Version2
F-1 F-2 F-1 F-2
dataset
G 0.971 0.967 0.971 0.967
H 0.780 0.762 0.800 0.777
S 0.401 0.320 0.453 0.365
T 0.881 0.825 0.989 0.985
df.stack().unstack(0).transpose()
我有以下数据帧 dfg(这是先前聚合的结果)。
F-1 F-2
dataset Model
G Baseline 0.971 0.967
Version2 0.971 0.967
H Baseline 0.780 0.762
Version2 0.800 0.777
S Baseline 0.401 0.320
Version2 0.453 0.365
T Baseline 0.881 0.825
Version2 0.989 0.985
我想要的是获得我的数据框的以下组织:
Baseline Version2
dataset F-1 F-2 F-1 F-2
G 0.971 0.967 0.971 0.967
H 0.780 0.762 0.800 0.777
S 0.401 0.320 0.453 0.365
T 0.881 0.825 0.989 0.985
我尝试了几种方法,但我认为最好的解决方案总是给我错误。我最“合乎逻辑”的解决方案是:
- 重置索引(将 'Model' 提取到列中);
- 从元组创建多级列;
- 将列更改为多级列。
像这样:
dfg.reset_index(inplace=True, level=['Model']
new_cols = [('Baseline', 'F-1'), ('Baseline', 'F-2'), ('Version2', 'F-1'), ('Version2', 'F-2')]
multi_cols = pd.MultiIndex.from_tuples(new_cols, names=('Model', 'Measure'))
但我收到以下错误:
ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
我知道这很原始,但我找不到任何可以解释如何从现有数据帧构建多级列的来源。
使用DataFrame.stack
with Series.unstack
, last clean columns names by DataFrame.rename_axis
:
#last previous, last levels
df = df.stack().unstack([-2,-1]).rename_axis((None, None), axis=1)
#or second and third levels
#df = df.stack().unstack([1,2]).rename_axis((None, None), axis=1)
print (df)
Baseline Version2
F-1 F-2 F-1 F-2
dataset
G 0.971 0.967 0.971 0.967
H 0.780 0.762 0.800 0.777
S 0.401 0.320 0.453 0.365
T 0.881 0.825 0.989 0.985
df.stack().unstack(0).transpose()