首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python创建多列的虚拟变量

用python创建多列的虚拟变量
EN

Stack Overflow用户
提问于 2019-03-15 12:43:28
回答 2查看 3.3K关注 0票数 4

我正在使用一个包含两个ID号列的dataframe。为了进一步的研究,我想对这些ID号(两个ID号)做一种虚拟变量。但是,我的代码并不合并来自两个dataframes的列。如何将两个数据文件中的列合并并创建虚拟变量?

Dataframe

代码语言:javascript
复制
import pandas as pd
import numpy as np
d = {'ID1': [1,2,3], 'ID2': [2,3,4]}
df = pd.DataFrame(data=d)

当前代码

代码语言:javascript
复制
pd.get_dummies(df, prefix = ['ID1', 'ID2'], columns=['ID1', 'ID2'])

期望输出

代码语言:javascript
复制
p = {'1': [1,0,0], '2': [1,1,0], '3': [0,1,1], '4': [0,0,1]}
df2 = pd.DataFrame(data=p)
df2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 12:45:12

如果输出中需要指示符使用max,则如果需要计数值,则在get_dummies之后使用sum和其他参数,并将值转换为字符串:

代码语言:javascript
复制
df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').max(level=0, axis=1)
#count alternative 
#df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').sum(level=0, axis=1)
print (df)
   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1
票数 2
EN

Stack Overflow用户

发布于 2019-03-15 12:45:03

剥猫皮的不同方法;下面是我应该怎么做的--使用额外的groupby

代码语言:javascript
复制
# pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum()
pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).max()

   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1

另一种选择是stacking,如果您喜欢简洁的话:

代码语言:javascript
复制
# pd.get_dummies(df.stack()).sum(level=0)
pd.get_dummies(df.stack()).max(level=0)

   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55182909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档