我的数据框如下:
a
0 [8, 10]
1 [12, 7, 9]
如您所见,a 列包含一个列表。该列表中的数字在我们的域中有意义,我想将它们用作功能。我的预期输出如下:
Tag_7 Tag_8 Tag_9 Tag_10 Tag_12
0 0 1 0 1 0
1 1 0 1 0 1
我使用了一些从互联网上找到的方法,它们满足了我的期望,但这些方法存在执行时间问题。其中之一如下:
pd.get_dummies(df.a.apply(pd.Series).stack().astype(int), prefix='Tag').sum(level=0)
我认为这种方法对小数据集很有用。就我而言,它没有用。我需要帮助。
提前致谢。祝你有个愉快的一天
试试 scikit-learn
看看它是否有帮助
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
cols = np.unique(np.concatenate(df.a))
df_final = pd.DataFrame(mlb.fit_transform(df.a), columns=cols).add_prefix('T_')
Out[213]:
T_7 T_8 T_9 T_10 T_12
0 0 1 0 1 0
1 1 0 1 0 1
如果你需要压缩每 ms
,使用 chain.from_iterable
比 np.concatenate
和使用 np.char 更快.add
到 T_
到列名
from sklearn.preprocessing import MultiLabelBinarizer
from itertools import chain
mlb = MultiLabelBinarizer()
cols = np.char.add('T_', np.unique(list(chain.from_iterable(df.a))).astype(str))
df_final = pd.DataFrame(mlb.fit_transform(df.a), columns=cols)