我希望展开此数据透视表,但我无法找到一种方法来删除/隐藏/删除" 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()
答案 0 :(得分:3)
您可以在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
答案 1 :(得分:1)
这是您的列的索引名称,您只需为其分配None
:
df.columns.name = None
应该工作
答案 2 :(得分:0)
仅供参考:我是一个新手,在python3.7中,似乎通过删除第一列即可完成工作。 (不知道保存到csv后为什么会更改)。
A)删除第一列之前:
df = df[df['date'] <= 20181221]
df['YYYYMM'] = a ['date'].astype(str).slice(0, 6)
pivot_table = pd.pivot_table(df, index=['product_name'], columns=['YYYYMM'], values=['income'], aggfunc=np.sum)
pivot_table.to_csv('xx.csv')
B)删除第一列:
pivot_table.columns = pivot_table.columns.droplevel(0)
pivot_table.to_csv('xxx.csv')