首页 > 解决方案 > 将熊猫数据框中的单个标头转换为多个标头

问题描述

嗨,我有以下带有标题和数据的数据框

   T  |  A - x | A - y | B - x | B - y |
1  m  |    a   |   b   |    c  |   d   |
2  n  |    a   |   b   |    c  |   d   |

where12are just index

如何将其转换为以下两种格式?

   T  |  A     |   A   |    B  |   B   |
      |  x     |   y   |    x  |   y   |
1  m  |    a   |   b   |    c  |   d   |
2  n  |    a   |   b   |    c  |   d   |
   T  |  A     |       |    B  |       |
      |  x     |   y   |    x  |   y   |
1  m  |    a   |   b   |    c  |   d   |
2  n  |    a   |   b   |    c  |   d   |

提前致谢

标签: pythonpandasdataframe

解决方案


您可以MultiIndex为带有分隔符的列创建,首先将所有非分隔符列转换为索引DataFrame.set_index,然后使用split

df = df.set_index('T')
df.columns = df.columns.str.split(' - ', expand=True)
print (df)
   A     B   
   x  y  x  y
T            
m  a  b  c  d
n  a  b  c  d

如果仅使用:

df.columns = df.columns.str.split(' - ', expand=True)
print (df)
    T  A     B   
  NaN  x  y  x  y
0   m  a  b  c  d
1   n  a  b  c  d

获得NaN第一级T

如果需要,可以用空字符串替换它:

df.columns = df.columns.str.split(' - ', expand=True)

f = lambda x: '' if pd.isna(x) else x
df = df.rename(columns=f)
print (df)
   T  A     B   
      x  y  x  y
0  m  a  b  c  d
1  n  a  b  c  d

MultiIndex如果需要在检查文档中显示所有级别:

display.multi_sparse
True
“稀疏化” MultiIndex 显示(不显示组内外层的重复元素)

#if need temporary use option
with pd.option_context('display.multi_sparse', False):
    print (df)
   A  A  B  B
   x  y  x  y
T            
m  a  b  c  d
n  a  b  c  d

推荐阅读