У меня очень простой фрейм данных для тестирования.Это выглядит так:
movieId | title | genres | Drama | Action | Comedy
1 | Toy Story | {'Drama', 'Comedy'} | 0 | 0 | 0
Я хочу отразить набор genres
в логических значениях в соответствующих столбцах, поэтому желаемый результат будет:
movieId | title | genres | Drama | Action | Comedy
1 | Toy Story | {'Drama', 'Comedy'} | 1 | 0 | 1
Итак, я попробовал этокод с apply:
def ttb(genreset):
return tuple(1 if g in genreset else 0 for g in all_genres)
all_genres = ('Drama', 'Action', 'Comedy')
df.T.loc[all_genres, :] = df.apply(lambda x: ttb(x.loc['genres']), axis=1)
Но это привело к ошибке, которую я действительно не могу обернуть:
ValueError: shape mismatch: value array of shape (19,) could not be broadcast to indexing result of shape (19,1)
Нужно ли как-топриведите возвращаемое значение apply
к фиксированному размеру или почему это не работает так, как я ожидал?Я также пытался использовать больше данных, но всегда получал одну и ту же ошибку.Поиск в Google по ошибке дал много результатов, но не предложил для меня жизнеспособных решений.