使用unstack()

时间:2018-03-21 10:35:12

标签: python python-3.x pandas

我正在尝试重塑pandas DataFrame,以便其中一个列会被拆散到“更广泛的”#。一旦我继续使用unstack(),新的列级别就会出现,但我似乎无法按照我想要的方式重新排列标题。

首先,我有以下df:

from pandas import *

fList = [['Packs', 'Brablik', 'Holesovice', '2017', 100],
         ['Decorations', 'Drapp-design', 'Holesovice', '2017', 150],
         ['Decorations', 'Klapetkovi', 'Holesovice', '2017', 200],
         ['Decorations', 'Lezecké dárky', 'Fler', '2017', 100],
         ['Decorations', 'PP', 'Other', '2017', 350],
         ['Decorations', 'Pavlimila', 'Akce', '2017', 20],
         ['Decorations', 'Pavlimila', 'Holesovice', '2017', 50],
         ['Decorations', 'Wiccare', 'Holesovice', '2017', 70],
         ['Toys', 'Klára Vágnerová', 'Holesovice', '2017', 100],
         ['Toys', 'Lucie Polonyiová', 'Holesovice', '2017', 80],
         ['Dresses', 'PP', 'Other', '2018', 200]]

df = DataFrame(fList, columns = ['Section', 'Seller', 'Store', 'Selected_period', 'Total_pieces'])

这会产生: enter image description here

因此我重新塑造了它:

df = df.set_index(['Section', 'Seller', 'Store', 'Selected_period']).unstack(level = -1)
df = df.fillna(0)
df.columns = df.columns.droplevel(0)

输出:

enter image description here

但是,我想在最终的数据框中只有以下列:Section,Seller,Store,2017,2018。我仍然无法重新安排它,以便我得到我想要的输出,尽管我试图采用已发布herehere以及here的解决方案。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您似乎错过了reset_index()电话。试试这个:

df = df.set_index(['Section', 'Seller', 'Store', 'Selected_period']).unstack(level = -1).fillna(0)
df.columns = df.columns.droplevel(0).rename('')
df = df.reset_index()

enter image description here