为了账号安全,请及时绑定邮箱和手机立即绑定

在一行而不是多行中获取编码的分类变量

在一行而不是多行中获取编码的分类变量

慕田峪7331174 2023-07-18 15:20:13
我有与此类似的原始数据框my_df = pd.DataFrame({'uid': [4, 3, 6, 4, 3, 6, 1],'days': ['D1', 'D3', 'D3', 'D4', 'D4', 'D2','D2']})  uid   days0   4   D11   3   D32   6   D33   4   D44   3   D4我使用 get_dummies() 并获得了这种编码数据帧。my_new_df = pd.get_dummies(my_df ,columns=['days'])uid days_D1 days_D2 days_D3 days_D40   4   1   0   0   01   3   0   0   1   02   6   0   0   1   03   4   0   0   0   14   3   0   0   0   1我想要一个数据框,其中每个 uid 的所有分类值都编码在一行中。像这样uid D1 D2 D3 D44    1  0  0 13    0  0  1 16    0  1  1 01    0  1  0 0我曾尝试寻找实现此结果的优化方法,但我无法做到这一点。我的原始数据框中有 222000 个值。请建议获取这样的编码分类变量的方法
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

您可以尝试对 进行分组,uid并在之后获取其他列的最大值get_dummies


(pd.get_dummies(my_df ,columns=['days'],prefix='',prefix_sep='')

   .groupby('uid',sort=False).max())

或者用pivot替代:


my_df.pivot_table(index="uid",columns="days",aggfunc='size',fill_value=0)

     D1  D2  D3  D4

uid                

4     1   0   0   1

3     0   0   1   1

6     0   1   1   0

1     0   1   0   0


查看完整回答
反对 回复 2023-07-18
?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以使用crosstab+ clip:


df = pd.crosstab(my_df['uid'], my_df['days']).clip(upper=1)

days  D1  D2  D3  D4

uid                 

1      0   1   0   0

3      0   0   1   1

4      1   0   0   1

6      0   1   1   0


查看完整回答
反对 回复 2023-07-18
?
手掌心

TA贡献1942条经验 获得超3个赞

尝试这个选项:


ss = pd.get_dummies(my_df, columns=['days']).groupby(['uid'], as_index=False).sum()

print(ss)

输出:


    uid days_D1 days_D2 days_D3 days_D4

0   1     0       1        0       0

1   3     0       0        1       1

2   4     1       0        0       1

3   6     0       1        1       0


查看完整回答
反对 回复 2023-07-18
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信