我想把这个数据透视表展平,但是我无法找到删除/隐藏/删除“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()
最佳答案
您可以在pandas0.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
关于python - 如何展平python/pandas数据透视表并处理列名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36752439/