【问题标题】:How do I flatten a python/pandas pivot table and manipulate the column names?如何展平 python/pandas 数据透视表并操作列名?
【发布时间】:2016-04-20 18:41:03
【问题描述】:

我希望展平此数据透视表,但我无法找到删除/隐藏/删除“ID”的多索引行的方法。

相关代码:

df = df [['B1','B2','B3','B4']]
df = pd.pivot_table(df,values=['BUCKET'],index=['ID'],columns=['TYPE'],aggfunc=len,fill_value='',margins=True)

产量:

      BUCKET
TYPE  B1     B2       B3      B4
ID
1     236    data1    data2   data3   
2     323    data4    data5   data3
3     442    data6    data2   data4
4     543    data8    data2   data3
5     676    data1    data8   data4

以下行通过删除第一行让我更近了一步

df.columns = df.columns.droplevel(0)

产量:

TYPE  B1     B2       B3      B4
ID
1     236    data1    data2   data3   
2     323    data4    data5   data3
3     442    data6    data2   data4
4     543    data8    data2   data3
5     676    data1    data8   data4

我需要进一步展平数据透视表并删除“TYPE”行标题,将其替换为“ID”,并隐藏/删除前一个“ID”行,使其看起来像这样干净整洁:

ID    B1     B2       B3      B4
1     236    data1    data2   data3   
2     323    data4    data5   data3
3     442    data6    data2   data4
4     543    data8    data2   data3
5     676    data1    data8   data4

我试过用这些来操作列/行,但无济于事......建议?谢谢!

pd.melt(df,id_vars=['ID'])
results.columns = results.columns.get_level_values(1)
pivot_table.values.reset_index().values.tolist()

【问题讨论】:

  • df = df.drop('column_name', 1) ?

标签: python pandas pivot-table


【解决方案1】:

您可以使用 pandas 中的新功能 0.18.0 - rename_axis 来删除列名,然后可能是 reset_index:

print df
TYPE   B1     B2     B3     B4
ID                            
1     236  data1  data2  data3
2     323  data4  data5  data3
3     442  data6  data2  data4
4     543  data8  data2  data3
5     676  data1  data8  data4

print df.rename_axis(None, axis=1)
     B1     B2     B3     B4
ID                          
1   236  data1  data2  data3
2   323  data4  data5  data3
3   442  data6  data2  data4
4   543  data8  data2  data3
5   676  data1  data8  data4

print df.rename_axis(None, axis=1).reset_index()
   ID   B1     B2     B3     B4
0   1  236  data1  data2  data3
1   2  323  data4  data5  data3
2   3  442  data6  data2  data4
3   4  543  data8  data2  data3
4   5  676  data1  data8  data4

【讨论】:

    【解决方案2】:

    这是您的列的索引名称,您可以将None 分配给它:

    df.columns.name = None
    

    应该工作

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2014-10-15
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多