Pandas Dataframe преобразовывает столбец списков в несколько столбцов - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь преобразовать фрейм данных, имеющий список различного размера, например, что-то вроде этого:

d={'A':[1,2,3],'B':[[1,2,3],[3,5],[4]]}
df = pd.DataFrame(data=d)
df

во что-то вроде этого:

d1={'A':[1,2,3],'B-1':[1,0,0],'B-2':[1,0,0],'B-3':[1,1,0],'B-4':[0,0,1],'B-5':[0,1,0]}
df1 = pd.DataFrame(data=d1)
df1

Спасибо за помощь

1 Ответ

0 голосов
/ 17 апреля 2020

explode списки, затем get_dummies и sum поверх исходного индекса. (max [кредит @JonClements], если вы хотите иметь настоящие пустышки, а не считать в случае, если могут быть кратны). Затем присоедините результат обратно

dfB = pd.get_dummies(df['B'].explode()).sum(level=0).add_prefix('B-')
#dfB = pd.get_dummies(df['B'].explode()).max(level=0).add_prefix('B-')

df = pd.concat([df['A'], dfB], axis=1)

#   A  B-1  B-2  B-3  B-4  B-5
#0  1    1    1    1    0    0
#1  2    0    0    1    0    1
#2  3    0    0    0    1    0

Вы можете использовать pop, чтобы удалить столбец, который вы взорвали, поэтому вам не нужно указывать df[list_of_all_columns_except_B] в конкатате:

df = pd.concat([df, pd.get_dummies(df.pop('B').explode()).sum(level=0).add_prefix('B-')],
                axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...