11

私はいくつかの線形回帰分析を実行しようとしています。非常に素晴らしい get_dummies を使用してダミー変数に変換するいくつかのカテゴリ機能があります。

私が直面している問題は、カテゴリのすべての要素を追加するとデータフレームが大きくなりすぎることです。

すべての用語ではなく、最も頻繁に使用される用語のダミー変数を作成する方法 (get_dummies またはより精巧な方法を使用) はありますか?

4

3 に答える 3

7

を使用value_counts()して頻度のカウントを行い、残しておきたい行のマスクを作成します。

import pandas as pd
values = pd.Series(["a","b","a","b","c","d","e","a"])
counts = pd.value_counts(values)
mask = values.isin(counts[counts > 1].index)
print pd.get_dummies(values[mask])

出力:

   a  b
0  1  0
1  0  1
2  1  0
3  0  1
7  1  0

すべてのデータが必要な場合:

values[~mask] = "-"
print pd.get_dummies(values)

出力:

   -  a  b
0  0  1  0
1  0  0  1
2  0  1  0
3  0  0  1
4  1  0  0
5  1  0  0
6  1  0  0
7  0  1  0
于 2013-08-02T12:48:54.330 に答える
2

最初に使用value_countsして、最も頻繁なものを確認できます。

In [11]: s = pd.Series(list('aabccc'))

In [12]: s
Out[12]: 
0    a
1    a
2    b
3    c
4    c
5    c
dtype: object

In [13]: s.value_counts()
Out[13]: 
c    3
a    2
b    1
dtype: int64

最も頻度の低い値 (例: 最初の 2 つを除くすべて):

In [14]: s.value_counts().index[2:]
Out[14]: Index([u'b'], dtype=object)

これらすべての出現箇所を単純に NaN に置き換えることができます。

In [15]: s1 = s.replace(s.value_counts().index[2:], np.nan)

In [16]: s1
Out[16]: 
0      a
1      a
2    NaN
3      c
4      c
5      c
dtype: object

そして実行しますget_dummies(これはNaNを無視するべきだと思いますが、バグがあるため、notnullハックがあります):

In [16]: pd.get_dummies(s1[s1.notnull()])
Out[16]: 
   a  c
0  1  0
1  1  0
3  0  1
4  0  1
5  0  1

これらの結果を含めたい場合は、別のプレースホルダー (例: '_') を使用できます。

于 2013-08-02T12:40:43.977 に答える