我正在为机器学习进行数据预处理并遇到问题。
这就是我想要做的。
表格图片:
表的类型是pandas dataframe。
我当前的表只剩一个了,我想将我的表转换为右表。
电影和演员的数量并不固定。
编辑: 数据输入
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
答案 0 :(得分:3)
试试这个? (BTW,kaggle movie dataset,最好使用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
MultiLabelBinarizer
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']})