Панды: столбец с повторяющимися группами на несколько столбцов

1

У меня ниже набора данных 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))

Он будет создавать столбцы более 100 тыс., Поскольку у меня есть более 100 тыс. Уникальных записей

Теги:
pandas
python-3.x

1 ответ

1
Лучший ответ

Используйте str.split с expand=True для DataFrame:

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
  • 0
    спасибо за быстрый ответ .. Можно ли заполнить None с помощью -1. Я получаю сообщение об ошибке ValueError: значение заполнения должно быть в категориях при попытке df1.fillna (-1) & df1.fillna ('- 1')
  • 0
    @Krishh - Как работает df1 = df1.fillna('-1') ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню