[英]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.