python - 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
问题:
现在我只需要分组和组合。然而,随着数以百万计的行和客户购买数百种产品,这种加入/组合的方法非常低效。是否有更“熊猫友好”或内置功能可以做到这一点?
解决方案
您可以替换pd.get_dummies(df['B'].explode()
为pd.get_dummies(df.B.explode()).sum(level=0)
并加入。
推荐阅读
- css - 活动管理员:默认情况下如何左对齐按钮
- r - 在闪亮的应用程序中为多个图像添加标题
- javascript - 将嵌套的 JSON 对象键附加到循环 - 将 JSON 动态转换为输入字段值
- jquery - 我正在尝试使用欧芹 js,但不幸的是它不起作用
- python - 使用 importlib 导入具有相对导入的模块
- python - 用文本文件python制作字典
- angular - 如何在 mat-form-field 中使用字体真棒图标在 mat-label 上显示 matTooltip
- arduino - 如何计算 Arduino 中的移动平均线?
- perl - yml 文件合并为一个
- android - 颤振格式日期时间