【问题标题】:Manipulate multiindex column in pivot_table操作 pivot_table 中的多索引列
【发布时间】:2021-10-30 15:10:10
【问题描述】:

我看到这个问题被问了多次,但其他问题的解决方案没有奏效!

我有类似的数据框

df = pd.DataFrame({
"date": ["20180920"] * 3 + ["20180921"] * 3,
"id": ["A12","A123","A1234","A12345","A123456","A0"],
"mean": [1,2,3,4,5,6],
"std" :[7,8,9,10,11,12],
"test": ["a", "b", "c", "d", "e", "f"],
"result": [70, 90, 110, "(-)", "(+)", 0.3],})

使用pivot_table

df_sum_table = (pd.pivot_table(df,index=['id'], columns = ['date'], values = ['mean','std']))

我明白了

df_sum_table.columns

MultiIndex([('mean', '20180920'),
        ('mean', '20180921'),
        ( 'std', '20180920'),
        ( 'std', '20180921')],
       names=[None, 'date'])

所以我想将date 列移到下面一行并删除id 行。但请保留id 的名字。 通过遵循这些过去的解决方案

ValueError when trying to have multi-index in DataFrame.pivot

Removing index name from df created with pivot_table()

Resetting index to flat after pivot_table in pandas

pandas pivot_table keep index

df_sum_table = (pd.pivot_table(df,index=['id'], columns = ['date'], values = ['mean','std'])).reset_index().rename_axis(None, axis=1)

但出现错误

TypeError: 必须像 names 一样传递列表。

如何删除date,但在第一列保留id

想要的输出

@jezrael

【问题讨论】:

    标签: python pandas pivot-table reshape


    【解决方案1】:

    试试rename_axis:

    df = df.pivot_table(index=['id'], columns = ['date'], values = ['mean', 'std']).rename_axis(columns={'date': None}).fillna('').reset_index().T.reset_index(level=1).T.reset_index(drop=True).reset_index(drop=True)
    df.index = df.pop('id').replace('', 'id').tolist()
    print(df)
    

    输出:

                 mean      mean       std       std
    id       20180920  20180921  20180920  20180921
    A0                        6                  12
    A12             1                   7          
    A123            2                   8          
    A1234           3                   9          
    A12345                    4                  10
    A123456                   5                  11
    

    您可以使用rename_axis 并使用字典映射重命名特定的列轴名称。我为列轴名称映射指定了 columns 参数。

    【讨论】:

    • 感谢您的快速回复!我们可以像在 OP 中那样制作表格吗?最后一张excel表格
    • @Alexander 加fillna('')
    • @Alexander 我添加了它
    • 真的!我没有看到 fillna('') 和没有任何变化。你也可以确认一下吗?我真的需要这种转变!
    • @Alexander fillna 将 NaN 更改为 '',您是否希望列重复?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2022-09-30
    • 2018-07-07
    • 1970-01-01
    • 2016-02-14
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多