在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
解决方案使用andlevel=0
参数,然后再次打开level=[0,1]
和reset_index()
。最后,使用以下方法将索引
列的名称更改为日期
:
请提供一个文本数据框,或复制它的代码。它比图像更容易响应。我不知道细节,但似乎是一个广泛的摘要。我删除了图像。@Vijay我添加了一个可能的解决方案。请检查它是否对你有效。它有效:)谢谢