熊猫:一列重复到多个列的组

时间:2018-09-26 08:36:56

标签: python python-3.x 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个新列

我尝试使用多标签Binarizer

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))

由于我有超过10万个唯一记录,它将创建10万多个列

1 个答案:

答案 0 :(得分:1)

expand=TrueDataFrame一起使用str.split

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