我正在从事机器学习的数据预处理工作,遇到了一个问题。
这就是我想做的。
表格图片:
表的类型是 pandas dataframe。
我当前的表格是左一张,我想将我的表格转换为右一张。
电影和 Actor 的数量不固定。
编辑: 数据输入
df=pd.DataFrame({'name':['A','B','C'],'actors':['a,b','b,d','c,m']})
预期输出:
a b c d m
A 1 1 0 0 0
B 0 1 0 1 0
C 0 0 1 0 1
最佳答案
试试这个? (顺便说一句,kaggle 电影数据集,最好使用 LabelEncoder
)
PS:我没有添加name
列,您可以简单地执行out['name']=df.name
选项 1 pd.crosstab
df.actors=df.actors.str.split(',')
df1=df.set_index('name').actors.apply(pd.Series).stack()
pd.crosstab(df1.index.get_level_values(0),df1).rename_axis(None).rename_axis(None,1)
Out[246]:
a b c d m
A 1 1 0 0 0
B 0 1 0 1 0
C 0 0 1 0 1
选项 2
get_dummies
pd.get_dummies(df.actors.str.split(',').apply(pd.Series).stack()).sum(level=0)
Out[230]:
a b c d m
0 1 1 0 0 0
1 0 1 0 1 0
2 0 0 1 0 1
选项3
多标签二值化器
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
pd.DataFrame(mlb.fit_transform(df.actors.str.split(',')),columns=mlb.classes_,index=df.name).reset_index()
Out[238]:
name a b c d m
0 A 1 1 0 0 0
1 B 0 1 0 1 0
2 C 0 0 1 0 1
数据输入
df=pd.DataFrame({'name':['A','B','C'],'actors':['a,b','b,d','c,m']})
关于python-3.x - 如何使用逗号分隔的值列创建虚拟变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290726/