在数据框中按行聚合特征

Aggregate features row-wise in dataframe

我正在尝试从示例中创建特征,如下所示:

index user product sub_product status
0 u1 p1 sp1 NA
1 u1 p1 sp2 NA
2 u1 p1 sp3 CANCELED
3 u1 p1 sp4 AVAIL
4 u2 p3 sp2 AVAIL
5 u2 p3 sp3 CANCELED
6 u2 p3 sp7 NA

首先,我创建了假人:

pd.get_dummies(x, columns = ['product', 'sub_product', 'status']

但我还需要按行分组,按用户划分 1 行,最好的方法是什么?
如果我将它分组:

pd.get_dummies(x, columns = ['product', 'sub_product', 'status'].groupby('user').max()
user product_p1 product_p3 sub_product_sp1 sub_product_sp2 sub_product_sp3 sub_product_sp4 sub_product_sp7 status_AVAIL status_CANCELED status_NA
u1 1 0 1 1 1 1 0 1 1 1
u2 0 1 0 1 1 0 1 1 1 1

我会泄露信息,例如。 u1 sp3 状态被取消。所以看起来我必须为每个列组合创建虚拟对象?

更新:你基本上是在寻找枢轴:

out = (df.astype(str)
   .assign(value=1)
   .pivot_table(index=['user'], columns=['product','sub_product','status'],
                values='value', fill_value=0, aggfunc='max')
)

out.columns = ['_'.join(x) for x in out.columns]