pandas - 如何创建多个虚拟变量(两列之间的交互)?
问题描述
我需要为每个选择和每个城市创建虚拟变量。选择集是整数列表:[10, 20, 30, 40, 50]
,城市集是字符串列表:['XX', 'YY', 'ZZ']
。
这是数据框:
choice city
10 XX
20 YY
20 YY
30 XX
10 XX
20 YY
40 ZZ
40 ZZ
50 YY
预期结果:
choice city 10_XX 10_YY 10_ZZ 20_XX 20_YY 20_ZZ 30_XX 30_YY 30_ZZ 40_XX 40_YY 40_ZZ 50_XX 50_YY 50_ZZ
10 XX 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20 YY 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
20 YY 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
30 XX 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
10 XX 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20 YY 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
40 ZZ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
40 ZZ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
50 YY 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
解决方案
您可以使用outer
比较。
u = np.equal.outer(df, df).any(1).all(-1).view('i1')
array([[1, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1]], dtype=int8)
现在回到所需的 DataFrame:
index = pd.MultiIndex.from_frame(df)
columns = index.map("{0[0]}_{0[1]}".format)
allc = set(
f'{i}_{j}' for i in df['choice'] for j in df['city'])
res = pd.DataFrame(u, index, columns).T.drop_duplicates().T
res.reindex(allc, axis=1, fill_value=0)
40_ZZ 50_ZZ 20_YY 50_XX 40_XX 20_ZZ 20_XX 10_YY 30_ZZ 30_YY 10_XX 30_XX 50_YY 40_YY 10_ZZ
choice city
10 XX 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
20 YY 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
YY 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
30 XX 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
10 XX 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
20 YY 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
40 ZZ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ZZ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
50 YY 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
推荐阅读
- java - 为什么 spring data jpa 存储库仅强制接口?
- entity-framework-core - Entity Framework Core - 获取待处理迁移的脚本
- python - 如何将新模型推向 tensorflow-serving?
- r - 如何使用 !is.na() 分配值 R data.table
- html - IE11 browser shape overflows SVG element
- dependency-injection - Guice 中 @Provides 方法的函数名
- jdbc - 使用 pyspark jdbc 执行 msdb 存储过程
- amazon-web-services - 如何写入特定的 CloudWatch 组
- python - 使用 Mutagen 编辑 .aiff 文件的标签数据,出现错误“TypeError: not a Frame instance”和“ID3NoHeaderError: doesn't start with an ID3 tag”
- git - 重新设置 git 分支及其与目标分支之间的任何分支