Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用unstack()重塑数据帧的形状_Python_Python 3.x_Pandas - Fatal编程技术网

Python 使用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],

我正试图重塑pandas DataFrame,以便其中一列将被解压为“更宽”。一旦我继续unstack()操作,就会出现新的列级别,但我似乎无法按照我想要的方式重新排列标题

首先,我有以下几点:

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()也有效。