在数据框中按行聚合特征
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]
我正在尝试从示例中创建特征,如下所示:
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]