python - Pandas:一列具有重复组到多列

标签 python python-3.x pandas

我有以下 pandas 数据集:

set_id
A,B
A,C,E
A

期望的结果:

set_id  set_id_1 set_id_2 set_id_3
A,B      A          B       null
A,C,E    A          C        E
A        A          null     null 

set_id 可以有 n 个值。假设 set_id 中值的最大数量是 100,我应该有 100 个新列

我尝试使用多标签二值化器

df1 = pd.DataFrame()
df1['set_id'] = df['set_id'].str.split(',')
from sklearn.preprocessing import MultiLabelBinarizer  
mlb = MultiLabelBinarizer() 
df1=df.join(pd.DataFrame(mlb.fit_transform(df['set_id'])                                  ,columns=mlb.classes_,index=df.head(100).index))

它将创建超过 100K 列,因为我有超过 100K 条唯一记录

最佳答案

使用str.split对于 DataFrame 使用 expand=True:

df1 = df['set_id'].str.split(',', expand=True)

具有列表理解的替代更快解决方案:

df1 = pd.DataFrame([x.split(',') for x in df['set_id']])
<小时/>
df1.columns = [f'set_id_{x+1}' for x in df1.columns]
df1 = df.join(df1)

print (df1)
  set_id set_id_1 set_id_2 set_id_3
0    A,B        A        B     None
1  A,C,E        A        C        E
2      A        A     None     None

关于python - Pandas:一列具有重复组到多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513429/

相关文章:

python - Django |自动退出开/关|单引号 | JSON

python - 在Python中运行更改(切换)用户的命令行脚本

python - tkinter ttk 小部件忽略背景颜色?

python - 围绕数字生成圆形图案的最简单方法

python - 如何按行而不是列对数据框进行排序?

python - 将数字分配给数据框中的行值

python - 如何确定日期时间列中的值是否在来自另一个数据帧的任何一对日期时间之间

python - 如何替换图像中彩色对象的颜色?

python - 装饰方法赋值前引用的局部变量

python - Gensim:如何从文本文件加载预计算的词向量