gpt4 book ai didi

python - 将 Pandas 列拆分为多列

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:25 25 4
gpt4 key购买 nike

Pandas 有没有办法把一列拆分成多列?我在数据框中有一列,内容如下:

a
[c,a]
b

我想把它分成:

colA colB colC
a nan nan
a nan c
a b nan

请注意原始列中第 2 行中变量的顺序。谢谢

最佳答案

考虑系列 s

s = pd.Series(['a', ['c', 'a'], 'b'])

s

0 a
1 [c, a]
2 b
dtype: object

使用 pd.Series'|'.join 神奇地变成串联的管道分隔字符串。使用 str.get_dummies 获取零和一的数组。将其乘以列以将其替换为列值。 where 屏蔽零并替换为 np.NaN

d1 = s.apply(lambda x: '|'.join(pd.Series(x))).str.get_dummies()
d1.mul(d1.columns.values).where(d1.astype(bool))

a b c
0 a NaN NaN
1 a NaN c
2 NaN b NaN

项目/杀死

import itertools

n = len(s)
i = np.arange(n).repeat([len(x) if hasattr(x, '__len__') else 1 for x in s])
j, u = pd.factorize(list(itertools.chain(*s)))
m = u.size
b = np.bincount(i * m + j, minlength=n * m).reshape(n, m)
pd.DataFrame(np.where(b, u, np.NaN), columns=u)

a b c
0 a NaN NaN
1 a NaN c
2 NaN b NaN

时间

%%timeit
d1 = s.apply(lambda x: '|'.join(pd.Series(x))).str.get_dummies()
d1.mul(d1.columns.values).where(d1.astype(bool))

100 loops, best of 3: 2.58 ms per loop

%%timeit
n = len(s)
i = np.arange(n).repeat([len(x) if hasattr(x, '__len__') else 1 for x in s])
j, u = pd.factorize(list(itertools.chain(*s)))
m = u.size
b = np.bincount(i * m + j, minlength=n * m).reshape(n, m)
pd.DataFrame(np.where(b, u, np.NaN), columns=u)

1000 loops, best of 3: 287 µs per loop

%%timeit
s.apply(pd.Series)\
.stack().str.get_dummies().sum(level=0)\
.pipe(lambda x: x.mul(x.columns.values))\
.replace('',np.nan)\
.add_prefix('col')

100 loops, best of 3: 4.24 ms per loop

关于python - 将 Pandas 列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com