Reputation: 12669
I have one data frame :
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
What I am looking for :
I want to split the values_a column using separator and make extra columns:
What I have tried:
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)
Which is doing the job, How can I optimize this code using native pandas functions?
Upvotes: 0
Views: 103
Reputation: 12669
I tried this using get_dummies
, It's working out :
one_hot = pd.concat([df,df.values_a.str.get_dummies(sep=';')],1)
Upvotes: 2