35

次の問題を処理するためのpythonicな方法を探しています。

このpandas.get_dummies()方法は、データフレームのカテゴリ列からダミーを作成するのに最適です。たとえば、列に の値がある場合、 は 2 つのダミー変数を作成し['A', 'B']get_dummies()それに応じて 0 または 1 を割り当てます。

今、私はこの状況を処理する必要があります。単一の列、それを「ラベル」と呼びましょう。値は次のようになり['A', 'B', 'C', 'D', 'A*C', 'C*D']ます。get_dummies()は 6 つのダミーを作成しますが、行に複数の 1 が含まれるように、4 つだけが必要です。

これをpythonicな方法で処理する方法はありますか? それを取得するための段階的なアルゴリズムしか考えられませんでしたが、それには get_dummies() は含まれません。ありがとう

編集され、より明確になることを願っています!

4

4 に答える 4

75

この質問が出されてからしばらく経っていることは知っていますが、ドキュメントでサポートされているワンライナーがあります(少なくとも現在はあります) :

In [4]: df
Out[4]:
      label
0  (a, c, e)
1     (a, d)
2       (b,)
3     (d, e)

In [5]: df['label'].str.join(sep='*').str.get_dummies(sep='*')
Out[5]:
   a  b  c  d  e
0  1  0  1  0  1
1  1  0  0  1  0
2  0  1  0  0  0
3  0  0  0  1  1
于 2014-08-08T17:25:47.957 に答える
4

生データを使用してダミー データフレームを生成し、特定のアトムを含む列を分離して、結果の一致をアトム列に保存できます。

df
Out[28]: 
  label
0     A
1     B
2     C
3     D
4   A*C
5   C*D

dummies = pd.get_dummies(df['label'])

atom_col = [c for c in dummies.columns if '*' not in c]

for col in atom_col:
    ...:     df[col] = dummies[[c for c in dummies.columns if col in c]].sum(axis=1)
    ...:     

df
Out[32]: 
  label  A  B  C  D
0     A  1  0  0  0
1     B  0  1  0  0
2     C  0  0  1  0
3     D  0  0  0  1
4   A*C  1  0  1  0
5   C*D  0  0  1  1
于 2013-09-19T09:44:07.343 に答える