在Python中透视/取消堆叠数据帧

在Python中透视/取消堆叠数据帧,python,pandas,pivot,Python,Pandas,Pivot,我有以下数据帧 01/01/2017 02/01/2017 Productid ProductName Sales Discount Sales Discount 1 abc 100 12 234 23 2 xyz 156 13

我有以下数据帧

                            01/01/2017             02/01/2017
 Productid   ProductName    Sales     Discount     Sales     Discount
 1           abc            100       12           234       23
 2           xyz            156       13           237       13
 3           pqr            300       12           198       18
我需要将其转换为以下数据帧

 Productid   ProductName    Date          Sales      Discount
 1           abc            01/01/2017    100        12
 1           abc            02/01/2017    234        23
 2           xyz            01/01/2017    156        13
 2           xyz            02/01/2017    237        13
 3           pqr            01/01/2017    300        12
 3           pqr            02/01/2017    198        18
df = pd.read_clipboard() #reading part of OP's Dataframe
df
    Productid   ProductName Sales   Discount    Sales.1 Discount.1
0           1           abc   100         12        234         23
1           2           xyz   156         13        237         13
2           3           pqr   300         12        198         18

df.columns = ['Productid', 'ProductName', 'Sales', 'Discount', 'Sales', 'Discount']
df.set_index(keys=['Productid','ProductName'],inplace=True)
df
                         Sales  Discount    Sales   Discount
Productid   ProductName             
        1           abc    100        12      234         23
        2           xyz    156        13      237         13
        3           pqr    300        12      198         18

array = [['01/01/2017','01/01/2017','02/01/2017','02/01/2017'],
         ['Sales', 'Discount', 'Sales',  'Discount']]
df.columns = pd.MultiIndex.from_arrays(array) #setting multi-index

如何在Python中实现这一点?

多索引很难直接复制。因此,首先根据OP的原始数据帧初始化数据帧

 Productid   ProductName    Date          Sales      Discount
 1           abc            01/01/2017    100        12
 1           abc            02/01/2017    234        23
 2           xyz            01/01/2017    156        13
 2           xyz            02/01/2017    237        13
 3           pqr            01/01/2017    300        12
 3           pqr            02/01/2017    198        18
df = pd.read_clipboard() #reading part of OP's Dataframe
df
    Productid   ProductName Sales   Discount    Sales.1 Discount.1
0           1           abc   100         12        234         23
1           2           xyz   156         13        237         13
2           3           pqr   300         12        198         18

df.columns = ['Productid', 'ProductName', 'Sales', 'Discount', 'Sales', 'Discount']
df.set_index(keys=['Productid','ProductName'],inplace=True)
df
                         Sales  Discount    Sales   Discount
Productid   ProductName             
        1           abc    100        12      234         23
        2           xyz    156        13      237         13
        3           pqr    300        12      198         18

array = [['01/01/2017','01/01/2017','02/01/2017','02/01/2017'],
         ['Sales', 'Discount', 'Sales',  'Discount']]
df.columns = pd.MultiIndex.from_arrays(array) #setting multi-index
假设这是OP的数据帧:

df
                         01/01/2017         02/01/2017
                         Sales  Discount    Sales   Discount
Productid   ProductName             
        1           abc    100        12      234         23
        2           xyz    156        13      237         13
        3           pqr    300        12      198         18
解决方案使用and
level=0
参数,然后再次打开
level=[0,1]
reset_index()
。最后,使用以下方法将
索引
列的名称更改为
日期


请提供一个文本数据框,或复制它的代码。它比图像更容易响应。我不知道细节,但似乎是一个广泛的摘要。我删除了图像。@Vijay我添加了一个可能的解决方案。请检查它是否对你有效。它有效:)谢谢