Python 在一列中转换列名多重索引
我有这个数据框Python 在一列中转换列名多重索引,python,pandas,indexing,rename,Python,Pandas,Indexing,Rename,我有这个数据框 dt = pd.DataFrame({'At': ['A','B','C'], 'R': ['27,0', '27,0', '27,0'], 'V1': [0,0,0], 'V2': [100,32,72], 'V3':[31,12,3]}) At R V1 V2 V3 0 A 27,0 0 100 31 1 B 27,0
dt = pd.DataFrame({'At': ['A','B','C'],
'R': ['27,0', '27,0', '27,0'],
'V1': [0,0,0],
'V2': [100,32,72], 'V3':[31,12,3]})
At R V1 V2 V3
0 A 27,0 0 100 31
1 B 27,0 0 32 12
2 C 27,0 0 72 3
然后我做一个透视表
dt.pivot_table(index='At', columns='R',
values=['V1','V2','V3']).reset_index()
At V1 V2 V3
R 27,0 27,0 27,0
0 A 0 100 31
1 B 0 32 12
2 C 0 72 3
我想把我的multindex列的名称改成这样
At 27,0_V1 27,0_V2 27,0_V3
0 A 0 100 31
1 B 0 32 12
2 C 0 72 3
这只是一个样本,我有不止一个级别
谢谢稍微操纵一下标题;使用
swaplevel
+MultiIndex.map
:
v = dt.pivot_table(index='At', columns='R',
values=['V1','V2','V3']).reset_index()
v.columns = v.columns.swaplevel().map('_'.join).str.strip('_')
或者,正如斯科特·波士顿所说
v.columns = v.columns.map('{0[1]}_{0[0]}'.format).str.strip('_')
您可以使用format而不是swaplevel、
pdt.columns.map('{0[1]}}{0[0]}.format).str.strip('''.'代码'.
v
At 27,0_V1 27,0_V2 27,0_V3
0 A 0 100 31
1 B 0 32 12
2 C 0 72 3