こんにちは、カテゴリ変数を含むpandasデータフレームdf
があります。
df=pandas.DataFrame(data=[['male','blue'],['female','brown'],
['male','black']],columns=['gender','eyes'])
df
Out[16]:
gender eyes
0 male blue
1 female brown
2 male black
関数get_dummiesを使用して、次のデータフレームを取得します
df_dummies = pandas.get_dummies(df)
df_dummies
Out[18]:
gender_female gender_male eyes_black eyes_blue eyes_brown
0 0 1 0 1 0
1 1 0 0 0 1
2 0 1 1 0 0
ただし、列gender_female
およびgender_male
元の列がバイナリ値をとることができるため、同じ情報が含まれます。 2つの列のうち1つだけを保持する(スマートな)方法はありますか?
[〜#〜]更新[〜#〜]
の用法
df_dummies = pandas.get_dummies(df,drop_first=True)
私にくれますか
df_dummies
Out[21]:
gender_male eyes_blue eyes_brown
0 1 1 0
1 0 0 1
2 1 0 0
しかし、元々2つの可能性しかなかった列を削除したいと思います
望ましい結果は次のようになります
df_dummies
Out[18]:
gender_male eyes_black eyes_blue eyes_brown
0 1 0 1 0
1 0 0 0 1
2 1 1 0 0
はい、引数dropfirst
を使用できます:
drop_first=True
ドキュメント から:
pd.get_dummies(pd.Series(list('abcaa')), drop_first=True)
b c
0 0 0
1 1 0
2 0 1
3 0 0
4 0 0
eyes
のすべてのダミー列と、gender
のダミー列を1つ持つには、次を使用します。
df = pd.get_dummies(df, prefix=['eyes'], columns=['eyes'])
df = pd.get_dummies(df,drop_first=True)
出力:
eyes_black eyes_blue eyes_brown gender_male
0 0 1 0 1
1 0 0 1 0
2 1 0 0 1
より一般的:
gender eyes heigh
0 male blue tall
1 female brown short
2 male black average
for i in df.columns:
if len(df.groupby([i]).size()) > 2:
df = pd.get_dummies(df, prefix=[i], columns=[i])
df = pd.get_dummies(df, drop_first=True)
出力:
eyes_black eyes_blue eyes_brown heigh_average heigh_short heigh_tall \
0 0 1 0 0 0 1
1 0 0 1 0 1 0
2 1 0 0 1 0 0
gender_male
0 1
1 0
2 1