pandas.get_dummies
は、カテゴリー値ごとにダミー変数を発行します。 N-1個のダミー変数のみを作成するように依頼する自動化された簡単な方法はありますか? (1つの「ベースライン」変数を任意に削除するだけです)?
データセットの共直線性を回避するために必要です。
Pandasバージョン0.18.0は、まさにあなたが探しているものを実装しました:drop_first
オプション。次に例を示します。
In [1]: import pandas as pd
In [2]: pd.__version__
Out[2]: u'0.18.1'
In [3]: s = pd.Series(list('abcbacb'))
In [4]: pd.get_dummies(s, drop_first=True)
Out[4]:
b c
0 0.0 0.0
1 1.0 0.0
2 0.0 1.0
3 1.0 0.0
4 0.0 0.0
5 0.0 1.0
6 1.0 0.0
これを行うにはいくつかの方法があります。
おそらく最も簡単なのは、_get_dummies
_を呼び出す前に値の1つをNone
に置き換えることです。あなたが持っていると言う:
_import pandas as pd
import numpy as np
s = pd.Series(list('babca'))
>> s
0 b
1 a
2 b
3 c
4 a
_
次に、以下を使用します。
_>> pd.get_dummies(np.where(s == s.unique()[0], None, s))
a c
0 0 0
1 1 0
2 0 0
3 0 1
4 1 0
_
b
を削除します。
(もちろん、カテゴリ列にNone
がまだ含まれていないかどうかを考慮する必要があります。)
もう1つの方法は、prefix
引数を_get_dummies
_に使用することです。
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False)
prefix:文字列、文字列のリスト、または文字列のdict、デフォルトなし-DataFrame列名を追加する文字列DataFrameでget_dummiesを呼び出すときに、列数に等しい長さのリストを渡します。あるいは、プレフィックスは、列名をプレフィックスにマッピングする辞書にすることができます。
これにより、結果のすべての列にプレフィックスが追加され、このプレフィックスが付いた列の1つを消去できます(一意にするだけです)。