首页 > 解决方案 > Pandas 到二进制列的值列表

问题描述

我有一个购买各种物品的用户的数据框。我想将该值列表拆分为单独的列,并为购买该项目的用户设置一个二进制标志。

输入:

       A           B
0  James  [123, 456]
1   Mary       [123]
2   John  [456, 789]

预期输出:

       A           B  123  456  789
0  James  [123, 456]    1    1    0
1   Mary       [123]    1    0    0
2   John  [456, 789]    0    1    1

我尝试过的(一步一步)

df['B'].explode()是我的第一步:

0    123
0    456
1    123
2    456
2    789

使用:get_dummies() pd.get_dummies(df['B'].explode())

   123  456  789
0    1    0    0
0    0    1    0
1    1    0    0
2    0    1    0
2    0    0    1

在 index 上加入df.join(pd.get_dummies(df['B'].explode()))它:

       A           B  123  456  789
0  James  [123, 456]    1    0    0
0  James  [123, 456]    0    1    0
1   Mary       [123]    1    0    0
2   John  [456, 789]    0    1    0
2   John  [456, 789]    0    0    1

问题:

现在我只需要分组和组合。然而,随着数以百万计的行和客户购买数百种产品,这种加入/组合的方法非常低效。是否有更“熊猫友好”或内置功能可以做到这一点?

标签: pythonpandasdataframe

解决方案


您可以替换pd.get_dummies(df['B'].explode()pd.get_dummies(df.B.explode()).sum(level=0)并加入。


推荐阅读