给定以下包含表格格式矩阵的数据框:
values = list(range(5))
var1 = ['01', '02', '03', '0', '0']
var2 = ['a', 'b', 'c', 'd', 'e']
var3 = ['01', '02', '03', '0', '0']
var4 = ['a', 'b', 'c', 'd', 'e']
var5 = ['S1', 'S1','S1', 'S3', 'S2']
var6 = ['P1', 'P1','P1', 'P3', 'P2']
df = pd.DataFrame({'var1': var1,
'var2': var2,
'var3': var3,
'var4': var4,
'var5': var5,
'var6': var6,
'value': values})
以下对 var5 和 var6 施加的顺序:
var5_order = ['S1', 'S2', 'S3', 'S4']
var6_order = ['P1', 'P2', 'P3', 'P4']
如何以 var6、var1 和 var2(按此顺序)定义行多重索引以及 var5、var3 和 var4(按此顺序)定义列多重索引的方式对数据帧进行透视?另外,如何在透视数据框中施加 var5_order 和 var6_order ?
最佳答案
是的,您可以使用 ordered=True
执行 pd.Categorical
:
df['var5'] = pd.Categorical(df['var5'], categories=var5_order, ordered=True)
df['var6'] = pd.Categorical(df['var6'], categories=var6_order, ordered=True)
df.pivot_table(index=['var6','var1','var2'],
columns=['var5','var3','var4'],
values='value')
输出:
var5 S1 S2 S3
var3 01 02 03 0 0
var4 a b c e d
var6 var1 var2
P1 01 a 0.0 NaN NaN NaN NaN
02 b NaN 1.0 NaN NaN NaN
03 c NaN NaN 2.0 NaN NaN
P2 0 e NaN NaN NaN 4.0 NaN
P3 0 d NaN NaN NaN NaN 3.0
关于python - 使用行和列多重索引和给定顺序从表格转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72996661/