Python 从多索引中的单个列中删除一个级别
我有以下数据帧dfPython 从多索引中的单个列中删除一个级别,python,pandas,indexing,multi-index,Python,Pandas,Indexing,Multi Index,我有以下数据帧df col1 col2 col3 a b a b a b 1 x1 x1 y11 y12 z11 z12 2 x2 x2 y21 y22 z21 z22 3 x3 x3 y31 y32 z31 z32 假设col1的“a”和“b”相同。我想删除整个级别的字母('a','b'),但只从col1中删
col1 col2 col3
a b a b a b
1 x1 x1 y11 y12 z11 z12
2 x2 x2 y21 y22 z21 z22
3 x3 x3 y31 y32 z31 z32
假设col1的“a”和“b”相同。我想删除整个级别的字母('a','b'),但只从col1中删除。我不想使用drop()删除“a”或“b”,如中所示
我想从col1中删除级别,以获得
col1 col2 col3
a b a b
1 x1 y11 y12 z11 z12
2 x2 y21 y22 z21 z22
3 x3 y31 y32 z31 z32
给你。这是一项相当繁琐的工作,但我不相信熊猫自然支持这种多索引功能。我分解了所有步骤,以更具体地展示我是如何得到结果的,但您可以更轻松地将其简化
import pandas as pd
import numpy as np
arrays = [np.array(['col1', 'col1', 'col2', 'col2', 'col3', 'col3']),
np.array(['a', 'b', 'a', 'b', 'a', 'b'])]
df = pd.DataFrame(np.random.randn(3, 6), columns=arrays)
df_part = df[df.columns[:2]]
df_part2 = df[df.columns[2:]]
df_part.columns.set_levels(['a', ''], level=1, inplace=True)
new_df = pd.concat([df_part, df_part2], axis=1)
result = new_df[new_df.columns[1:]]