Python 使用unstack()重塑数据帧的形状
我正试图重塑pandas DataFrame,以便其中一列将被解压为“更宽”。一旦我继续unstack()操作,就会出现新的列级别,但我似乎无法按照我想要的方式重新排列标题 首先,我有以下几点:Python 使用unstack()重塑数据帧的形状,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正试图重塑pandas DataFrame,以便其中一列将被解压为“更宽”。一旦我继续unstack()操作,就会出现新的列级别,但我似乎无法按照我想要的方式重新排列标题 首先,我有以下几点: from pandas import * fList = [['Packs', 'Brablik', 'Holesovice', '2017', 100], ['Decorations', 'Drapp-design', 'Holesovice', '2017', 150],
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'])
这将产生:
因此,我将其重塑为:
df = df.set_index(['Section', 'Seller', 'Store', 'Selected_period']).unstack(level = -1)
df = df.fillna(0)
df.columns = df.columns.droplevel(0)
这将产生:
然而,我希望在最终的数据框架中有以下几列:章节,卖方,商店,2017年,2018年。我仍然无法重新安排它,以便获得我想要的输出,尽管我试图采用发布和发布的解决方案。有什么建议吗?如果我理解正确,您似乎只是缺少了一个
reset\u 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()
您想要的输出是什么?我想要的输出是最后一次发布的输出,但有不同的列,必须有第一列部分、第二列卖家、第三列商店、第四列2018、第五列2018。有没有办法获得2017和2018的某种连接列名称,以便命名它们“Total_pieces:2017”和“Total_pieces:2018”?是的。不是很优雅,但在上面的解决方案中,您可以替换
df.columns.droplevel(0)。通过df.columns.get_level_values(0)+:“+df.columns.get_level_values(1)
对pd.pivot_table()也有效。