Используйте gruopby
и reset_index
, чтобы создать числовой индекс c для каждого хобби в каждой группе имен. Изменить форму (unstack), чтобы получить матричный формат.
df = pd.DataFrame({'Name':['Anna','Anna','Anna','Lisa','Lisa','Tom' ],
'Hobby':['drawing','swimming','skiing','running','singing','drawing']})
result = (df.groupby('Name')['Hobby']
.apply(lambda x:x.reset_index(drop=True))
.unstack()
.rename(columns=lambda x:f'Hobby {x+1}'))
Редактировать: комбинация двух хобби
df_merge = (df.merge(df, on='Name')
.assign(Hobby_combi=lambda x:x.Hobby_x+'|'+x.Hobby_y)
.loc[lambda x:x.Hobby_x!=x.Hobby_y]
.groupby(['Name','Hobby_combi'])
.size()
.unstack()
.reindex(df['Name'].unique())
.fillna(0, downcast='infer'))
df_merge.sum()