将多索引折叠为uns后的索引

2024-03-28 14:46:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如何操作以下数据框,使列成为索引,而不是多索引:

df = pandas.DataFrame([
    {'col_1': 'A', 'col_2': 'A', 'value': 1},
    {'col_1': 'A', 'col_2': 'B', 'value': 1},
    {'col_1': 'A', 'col_2': 'C', 'value': 1},
    {'col_1': 'B', 'col_2': 'A', 'value': 1},
    {'col_1': 'B', 'col_2': 'B', 'value': 1},
    {'col_1': 'B', 'col_2': 'C', 'value': 1},
]).set_index(['col_1', 'col_2']).unstack()

这使得:

      value      
col_2     A  B  C
col_1            
A         1  1  1
B         1  1  1

但是,我想:

col_1     A  B  C
A         1  1  1
B         1  1  1

我知道我可以用.loc来达到一半:

df.loc[:, 'value']

这使得:

col_2  A  B  C
col_1         
A      1  1  1
B      1  1  1

然而,我看不到下一步


Tags: 数据dataframepandasdfindexvaluecolloc
3条回答

你可以做:

df.columns = [e[1] for e in df.columns.values]
print(df)

输出

       A  B  C
col_1         
A      1  1  1
B      1  1  1

即数据帧unstack您可以更改为series

df = pandas.DataFrame([
    {'col_1': 'A', 'col_2': 'A', 'value': 1},
    {'col_1': 'A', 'col_2': 'B', 'value': 1},
    {'col_1': 'A', 'col_2': 'C', 'value': 1},
    {'col_1': 'B', 'col_2': 'A', 'value': 1},
    {'col_1': 'B', 'col_2': 'B', 'value': 1},
    {'col_1': 'B', 'col_2': 'C', 'value': 1},
]).set_index(['col_1', 'col_2']).value.unstack()
df
col_2  A  B  C
col_1         
A      1  1  1
B      1  1  1

您看到的是驻留在数据帧的indexcolumns属性中的pandas.Index对象的名称。要保留显示的对象,需要在columns属性中去掉pandas.Index对象的名称

df.value.rename_axis(None, axis=1)

       A  B  C
col_1         
A      1  1  1
B      1  1  1

为了更进一步,您确实需要使用reset_indexindex中删除col_1

df.value.rename_axis(None, axis=1).reset_index()

  col_1  A  B  C
0     A  1  1  1
1     B  1  1  1

相关问题 更多 >