Pandas: Как разделить столбец на несколько столбцов по разделителю? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть один фрейм данных:

df ={'date' : ['2020-08-05', '2020-08-05', '2020-08-05'], 'values_a':['jbl_1;jbl2', 'jbl44;jbl441;imax76;wer43', 'macbook12;iphone43;micromax12;ios11'], 'types' : ['connector1','connector1','connector1'], 'connection' : ['working','working','working']}
df = pd.DataFrame(df)

         date                             values_a       types connection
0  2020-08-05                           jbl_1;jbl2  connector1    working
1  2020-08-05            jbl44;jbl441;imax76;wer43  connector1    working
2  2020-08-05  macbook12;iphone43;micromax12;ios11  connector1    working

То, что я ищу:

введите описание изображения здесь

Я хочу разделить столбец values_a с помощью разделителя и создать дополнительные столбцы:

Что я пробовал:

def generate_one_hot(df):
    # make a list of all unique columns values
    all_columns =  reduce(operator.concat,[column.split(';') for column in df['values_a']])

    # fill one hot values
    all_values  = [[1 if column_name in value else 0 for value in df['values_a']]  for column_name in all_columns]

    # map it
    dataframe   = pd.DataFrame({col_name:col_val for col_name, col_val in zip(all_columns,all_values)})
    
    return pd.concat([df,dataframe],1)

Что делает свою работу, как могу ли я оптимизировать этот код, используя собственные pandas функции?

1 Ответ

2 голосов
/ 07 августа 2020

Я пробовал использовать get_dummies, получается:

one_hot = pd.concat([df,df.values_a.str.get_dummies(sep=';')],1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...