簡體   English   中英

Python-嘗試從具有字符串列表的列中創建二進制功能

[英]Python - Attempting to create binary features from a column with lists of strings

我很難拿出清晰的標題,但舉個例子應該可以使事情更清楚。

Index C1
1     [dinner]
2     [brunch, food]
3     [dinner, fancy]

現在,我想為該列中的每個唯一值創建一組二進制功能。

上面的示例將變為:

Index C1               dinner  brunch  fancy food
1     [dinner]         1       0       0     0
2     [brunch, food]   0       1       0     1
3     [dinner, fancy]  1       0       1     0

任何幫助將非常感激。

對於高性能解決方案,我建議通過列出您的列來創建一個新的DataFrame。

pd.get_dummies(pd.DataFrame(df.C1.tolist()), prefix='', prefix_sep='')

   brunch  dinner  fancy  food
0       0       1      0     0
1       1       0      0     1
2       0       1      1     0

這將比apply(pd.Series)快得多。

假設列表沒有更多相同的值(例如['dinner', ..., 'dinner'] ),則此方法有效。 如果他們這樣做,那么您將需要一個額外的groupby步驟:

(pd.get_dummies(
    pd.DataFrame(df.C1.tolist()), prefix='', prefix_sep='')
   .groupby(level=0, axis=1)
   .sum())

好吧,如果您的數據是這樣的,那么您正在尋找的不再是“二進制”的。

也許使用MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
pd.DataFrame(mlb.fit_transform(df.C1),columns=mlb.classes_,index=df.Index).reset_index()
Out[970]: 
   Index  brunch  dinner  fancy  food
0      1       0       1      0     0
1      2       1       0      0     1
2      3       0       1      1     0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM