Python-重塑,枢轴,拆栈-MultiIndex

时间:2018-09-10 10:00:04

标签: pandas pivot reshape

我有一个下面的数据框正在尝试重塑。我已经查找了如何执行此操作,但是正在获取多个答案,并且尝试通过重复索引来实现获取错误时,或者我将仅获得1个宽行数据框。我一直在尝试的选项是unstack,pivot和ravel。在不迭代行的情况下重塑的最佳和最简单的方法是什么,我知道我可以解决,但我也知道有更好的方法。

为清楚起见,我提供了一个屏幕快照,其中显示了我所拥有的以及我正在尝试做的事情:

这就是我所拥有的(但是有成千上万行)

enter image description here

我正在尝试将具有相同Customer,W​​eek和Type的行下移到1个单行上:

enter image description here

看起来像这样:

enter image description here

编辑:如下所述,只是数据集的快速样本。我应该从一开始就提供。

import pandas as pd

d = {'Customer': ['Store_A']*12,
 'Class': ['1A','1A','2B','2B','3C','3C']*2,
 'Week':['08/19/2018','08/26/2018']*6, 
 'Type':['Food']*6 + ['Beverage']*6, 
 'Value': [None,None,1,1.5,1.1,1.2,None,None,0.96,0.70,0.96,0.96]}

test_df = pd.DataFrame(data=d)

1 个答案:

答案 0 :(得分:1)

您可以避免在熊猫中重复使用列名,因此我建议为其添加计数器:

g = test_df.groupby(['Customer','Week', 'Type']).cumcount().astype(str)

df = test_df.set_index(['Customer','Week', 'Type', g]).unstack().sort_index(axis=1, level=1)
df.columns = df.columns.map('_'.join)

df = df.reset_index()
print (df)
  Customer        Week      Type Class_0  Value_0 Class_1  Value_1 Class_2  \
0  Store_A  08/19/2018  Beverage      1A      NaN      2B     0.96      3C   
1  Store_A  08/19/2018      Food      1A      NaN      2B     1.00      3C   
2  Store_A  08/26/2018  Beverage      1A      NaN      2B     0.70      3C   
3  Store_A  08/26/2018      Food      1A      NaN      2B     1.50      3C   

   Value_2  
0     0.96  
1     1.10  
2     0.96  
3     1.20