猿问

在 unstack 之后将多索引折叠为索引

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


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

但是,我看不到下一步。


慕桂英3389331
浏览 124回答 3
3回答

慕工程0101907

您看到的是驻留在数据框和属性中的pandas.Index对象的名称。要保留您显示的内容,您需要删除属性中的对象名称。indexcolumnspandas.Indexcolumnsdf.value.rename_axis(None, axis=1)       A  B  Ccol_1         A      1  1  1B      1  1  1为了更进一步,您确实需要col_1从indexusing中删除reset_indexdf.value.rename_axis(None, axis=1).reset_index()  col_1  A  B  C0     A  1  1  11     B  1  1  1

萧十郎

那是unstack您可以更改为的数据框seriesdf = 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()dfcol_2  A  B  Ccol_1         A      1  1  1B      1  1  1

慕森卡

你可以这样做:df.columns = [e[1] for e in df.columns.values]print(df)输出       A  B  Ccol_1         A      1  1  1B      1  1  1
随时随地看视频慕课网APP

相关分类

Python
我要回答