Вы можете просто использовать get_dummies
. Допустим, этот кадр данных:
df = pd.DataFrame({'datetime':pd.date_range('2017-08-27', '2017-08-29'),
'mood':['good','meh','bad'],'activities':[['friends','party','gaming'],
["work", "friends", "good food"],
["work", "travel"]],
'notes':[np.nan, 'stuff stuff','fell off my bike']})
df.set_index(['datetime'], inplace=True)
mood activities notes
datetime
2017-08-27 good [friends, party, gaming] NaN
2017-08-28 meh [work, friends, good food] stuff stuff
2017-08-29 bad [work, travel] fell off my bike
просто concat
и get_dummies
:
df2 = pd.concat([df[['mood','notes']], pd.get_dummies(df['activities'].apply(pd.Series),
prefix='activity')], axis=1)
mood notes activity_friends activity_work activity_friends activity_party activity_travel activity_gaming activity_good food
datetime
2017-08-27 good NaN 1 0 0 1 0 1 0
2017-08-28 meh stuff stuff 0 1 1 0 0 0 1
2017-08-29 bad fell off my bike 0 1 0 0 1 0 0
Вы меняетезамените их на логические, если вы хотите использовать loc
:
df2.loc[:,df2.columns[2:]] = df2.loc[:,df2.columns[2:]].astype(bool)