python - 每列中有多个分号分隔变量的 DataFrame。如何一键编码?
问题描述
我有一个 DataFrame,每列中有多个变量 - 这些数据类型是字符串而不是列表。我无法对每列中的数据进行 One-Hot Encode。
Out:
A B C
Ella Red; Blue; Yellow Circle; Square; Triangle Small; Medium; Extra big
Mike Yellow; Red; Blue Oval; Triangle; Circle Medium; Big; Extra big
Dave Yellow; Red; Green Circle; Square; Triangle Extra small; Medium; Big
我希望使用多层列标题创建它,如下所示:
A B C
Red Blue Green Yellow Circle Triangle Square Oval ....
Ella 1 1 0 1 1 1 1 0 ....
Mike 1 1 0 1 1 1 0 1 ....
Dave 1 0 1 1 1 1 1 0 ....
我试过了,它对我有帮助,但只有当所有列都具有相同的变量时才有效: https ://stackoverflow.com/a/67110743/15646168
df = df.stack().str.get_dummies(sep=',')
df.columns = df.columns.str.strip()
df = df.stack().groupby(level=[0,1,2]).sum().unstack(level=[1,2])
太感谢了!
解决方案
concat
在 dict comprehseion 中使用- Series.str.get_dummies
only 将分隔符更改为;
:
df = pd.concat({x: df[x].str.get_dummies(sep='; ') for x in df.columns}, axis=1)
print (df)
A B C \
Blue Green Red Yellow Circle Oval Square Triangle Big Extra big
Ella 1 0 1 1 1 0 1 1 0 1
Mike 1 0 1 1 1 1 0 1 1 1
Dave 0 1 1 1 1 0 1 1 1 0
Extra small Medium Small
Ella 0 1 1
Mike 0 1 0
Dave 1 1 0
推荐阅读
- azure - 如何确保我的 Azure Devops Pipeline YAML 与我通过 Pipeline UI 所做的更改同步?
- c# - 使用 Core 3.1 Razor 提交带有长文本字段(大约 3000 个字符)的表单时出现 404.15 错误
- azure-ad-b2c - 受邀来宾用户能否使用 Azure AD B2C 登录?
- mysql - MySql:加载产品目录:在 Windows 7 上加载产品目录时遇到错误
- audio - 合并 2 个文件(音频和视频),在 FFMPEG 中带有 BITC 和水印
- android - Kotlin 在应用函数中分配属性后返回具有未分配属性的对象
- cakephp - 如何在 CakePHP 1.3 中修改 $content_for_layout
- azure - 如何将 CNAME 从多个插槽合并到通配符表达式
- python - 显式等待不适用于基于 Angular 的 PayPal 沙箱
- google-bigquery - BigQuery:是否可以通过在记录中添加字段来修改表架构