Python 将列转换为多索引
如何打开此数据帧的第一列,它是字符串和整数的混合Python 将列转换为多索引,python,pandas,indexing,Python,Pandas,Indexing,如何打开此数据帧的第一列,它是字符串和整数的混合 df=pd.DataFrame( [ [“标题1”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2, 3, 4, 5], [100, 2, 3, 4, 5], [“标题2”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2, 3, 4, 5], [100, 2, 3, 4, 5], [“标题3”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2
df=pd.DataFrame(
[
[“标题1”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
[“标题2”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
[“标题3”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
]
)
像这样
title1 a b c d
1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
title2 a b c d
1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
title3 a b c d
1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
进入一个多索引
,顶级为字符串,第二级为整数
a b c d
title1 1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
title2 1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
title3 1 2 3 4 5
10 2 3 4 5
100 2 3 4 5
使用:
这类问题的关键是创建一个布尔序列,标识0级索引的位置
mask = df[1].str.contains('a') # Identify the rows containing the level_0 multiindex
header = df.loc[0,1:4].to_list() # Get header list
df[-1] = df[0].where(mask).ffill() # Create a seperate level_0 column
result = (df[~mask.fillna(False)]
.set_index([-1,0])
.astype(int)
.rename_axis([None,None])
.set_axis(header,axis=1,inplace=False))
每行实际数据中的值a、b、c、d是否相同?@jezrael是的,它们是相同的。超级,所以答案应该很好。我如何命名两个索引列以显示,比如,标题上方的
i1
,以及[1,10100]
上方的i2
?@Casimir-change。重命名_轴((无,无))
为。重命名_轴(('i1','i2'))
mask = df[1].str.contains('a') # Identify the rows containing the level_0 multiindex
header = df.loc[0,1:4].to_list() # Get header list
df[-1] = df[0].where(mask).ffill() # Create a seperate level_0 column
result = (df[~mask.fillna(False)]
.set_index([-1,0])
.astype(int)
.rename_axis([None,None])
.set_axis(header,axis=1,inplace=False))