web-dev-qa-db-ja.com

get_dummiesを使用するときに冗長な列を削除する

こんにちは、カテゴリ変数を含む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
3
gabboshow

はい、引数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
2
Joe