2017-09-19 10 views
0

私は機械学習のためのデータ前処理に取り組んでおり、問題に直面しています。
ここは私がしたいことです。コンマで区切られた値を持つ列でダミー変数を作成するにはどうすればよいですか?

テーブルイメージ:

table image

表のタイプは、パンダのデータフレームです。

私の現在のテーブルは1つ残っています。私はテーブルを正しいものに変換したいと思います。

ムービーと俳優の数は固定されていません。


EDIT: データ入力

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 
+3

ない画像として、テキストなどのデータを追加してください。 Pythonに直接コピー&ペーストできるようにするのが望ましいです。これまでに何を試しましたか?何がうまくいかなかったのですか? –

答えて

2

これを試してみてください? (ところで、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 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']}) 
+0

'df.actors.str.split( '、')'のような関数があることは知らなかった。本当に役に立ちました。また、私に多くのオプションを与えてくれてありがとう! – kdino

+0

@kdino Yw、素敵な一日 – Wen

関連する問題