从包含列表的另一列创建pandas列的最有效方法

时间:2017-02-28 10:04:21

标签: python pandas dataframe scikit-learn creation

我有一个看起来像这样的pandas数据框

    | col1              | col2
-------------------------------
0   | ['a', 'b', 'c']   |   a
1   | ['b', 'd', 'e']   |   g

我想知道获取此数据帧的最有效方法是什么

    | col1              | col2 | a | b | c | d | e
---------------------------------------------------
0   | ['a', 'b', 'c']   |   a  | 1 | 1 | 1 | 0 | 0 
1   | ['b', 'd', 'e']   |   g  | 0 | 1 | 0 | 1 | 1

我尝试使用“apply”方法,但对于形状[40000,100]的数据帧似乎没有效率 (col1包含一组1k唯一值)

这是我的代码:

df = pd.DataFrame({'col1': [['a', 'b', 'c'], ['b', 'd', 'e']], 'col2': [2,5]})
s = set([item for sublist in df['col1'].values for item in sublist])
res = scipy.sparse.csr_matrix(df['col1'].apply(
                lambda row: [1 if i in [item for item in row] 
                               else 0 for i in s]).values.tolist())

然后res.toarray()给了我

array([[1, 1, 1, 0, 0], [0, 1, 0, 1, 1]], dtype=int64)

是否有人有更有效的方式来执行该操作?

事先,非常感谢!

0 个答案:

没有答案