Python - 重塑、旋转、拆叠 - 多索引
Python - reshape, pivot, unstack - multiindex
我在下面有一个数据框,我正在尝试重塑它。我已经查看了如何执行此操作,但是我得到了多个答案,并且在尝试将错误作为具有重复索引来实现时,或者我只会得到 1 个宽行数据框。我一直在尝试的选项是 unstack、pivot 和 ravel。在不迭代行的情况下重塑形状的最好和最简单的方法是什么,我知道我可以解决这个问题,但我也知道有更好的方法。
为了清楚起见,我提供了一个屏幕截图,展示了我所拥有的以及我正在尝试做的事情:
这是我所拥有的(但有数千行)
我正在尝试将具有相同客户、周和类型的行移动到 1 行中:
看起来像这样:
编辑:如下所述,只是数据集的一个快速样本。我应该从一开始就提供。
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)
您可以避免在 pandas 中出现重复的列名,因此我建议为其添加计数器:
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
我在下面有一个数据框,我正在尝试重塑它。我已经查看了如何执行此操作,但是我得到了多个答案,并且在尝试将错误作为具有重复索引来实现时,或者我只会得到 1 个宽行数据框。我一直在尝试的选项是 unstack、pivot 和 ravel。在不迭代行的情况下重塑形状的最好和最简单的方法是什么,我知道我可以解决这个问题,但我也知道有更好的方法。
为了清楚起见,我提供了一个屏幕截图,展示了我所拥有的以及我正在尝试做的事情:
这是我所拥有的(但有数千行)
我正在尝试将具有相同客户、周和类型的行移动到 1 行中:
看起来像这样:
编辑:如下所述,只是数据集的一个快速样本。我应该从一开始就提供。
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)
您可以避免在 pandas 中出现重复的列名,因此我建议为其添加计数器:
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