2 回答
TA贡献1811条经验 获得超4个赞
由于您的子列表中有重复项,因此这比 a 更成pivot问题get_dummies,但您需要先扩展您的子列表。
您可以在此处使用Series.explode后跟crosstab。
ii = df['items'].explode()
pd.crosstab(ii.index, ii)
items a b c d e f
row_0
0 1 0 0 0 0 0
1 1 1 0 0 0 0
2 0 0 0 1 1 2
3 0 0 0 1 1 1
4 1 1 1 0 0 0
表现
df = pd.concat([df]*10_000, ignore_index=True)
In [91]: %timeit chris(df)
1.07 s ± 5.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [92]: %timeit user11871120(df)
15.8 s ± 124 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [93]: %timeit ricky_kim(df)
56.4 s ± 1.1 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
TA贡献1851条经验 获得超3个赞
另一种使用applyand 的方法value_counts:
df['items'].apply(pd.value_counts).fillna(0).astype(int)
输出:
a b f d e c
0 1 0 0 0 0 0
1 1 1 0 0 0 0
2 0 0 2 1 1 0
3 0 0 1 1 1 0
4 1 1 0 0 0 1
添加回答
举报
