1

私はデータ サイエンスを学んでおり、データセットのダミー変数を作成したいと考えています。

["Category1", "Category2".."CategoryN"] のような一致するカテゴリのリストである「製品カテゴリ」列を持つデータフレームがあります。

Pandas にはダミー変数を自動的に作成する便利な機能 (pandas.get_dummies) があることは知っていますが、この場合は使用できないのではないでしょうか (?)。

各行をループして、各列の一致する要素に 1 を追加する方法を知っています。私の現在のコードはこれです:

for column_name in df.columns[1:]: #first column is "Product Category" and appended dummy columns (product category names) to the right previously
    for index, _ in enumerate(df[column_name][:10]): #limit 10 rows
        if column_name in df["Product Category"][index]:
            df[column_name][index] = 1    

ただし、上記のコードは効率的ではなく、100,000 行を超えるため使用できません。どういうわけか配列全体で操作を行いたいのですが、その方法がわかりません。

誰か助けてくれませんか?

4

2 に答える 2

2

get_dummies()を使用すると、ダミー変数に変換する列を指定できます。複数のアイテムが同じカテゴリを共有できるが、1 つのダミー変数にしか分類されない次の例を検討してください。

df = pd.DataFrame({'Languages':  ['R', 'Python', 'C#', 'PHP', 'Java', 'XSLT', 'SQL'],
                   'ProductCategory':  ['Statistical', 'General Purpose', 
                                        'General Purpose', 'Web', 'General Purpose', 
                                        'Special Purpose', 'Special Purpose']})
# BEFORE
print(df)

#    Languages  ProductCategory
# 0          R      Statistical
# 1     Python  General Purpose
# 2         C#  General Purpose
# 3        PHP              Web
# 4       Java  General Purpose
# 5       XSLT  Special Purpose
# 6        SQL  Special Purpose

newdf = pd.get_dummies(df, columns=['ProductCategory'], prefix=['Categ'])
# AFTER
print(newdf)

#    Languages  Categ_General Purpose  Categ_Special Purpose  Categ_Statistical  Categ_Web
# 0         R                      0                      0                  1          0
# 1    Python                      1                      0                  0          0
# 2        C#                      1                      0                  0          0
# 3       PHP                      0                      0                  0          1
# 4      Java                      1                      0                  0          0
# 5      XSLT                      0                      1                  0          0
# 6       SQL                      0                      1                  0          0
于 2015-11-29T04:26:50.557 に答える