Я изначально начал со следующего фрейма данных:
Набор данных относится к пользователям, отвечающим на несколько вопросов, у которых есть несколько вариантов ответа, и у пользователя есть возможность ответить более чем на один ответ.
movie_id, user_id, rated_value, question_id, answer_id, genre, user_gender, user_ethnicity
101, 345, 3.5, 1, 1, comedy, male, white
101, 345, 3.5, 1, 2, comedy, male, white
101, 345, 3.5, 2, 1, comedy, male, white
125, 345, 4.5, 1, 4, drama, male, white
101, 233, 4.0, 1, 3, comedy, female, black
101, 233, 4.0, 2, 2, comedy, female, black
125, 233, 3.0, 1, 1, drama, female, black
125, 233, 3.0, 2, 2, drama, female, black
125, 333, 3.0, 1, 1, comedy, male, asian
125, 333, 3.0, 2, 2, comedy, male, asian
Я хочу сгладить эту таблицу, поворачиваясь. Я могу успешно обойтись без ввода genre, user_gender, user_ethnicity
следующим образом:
pivoted_df = df_to_pivot.assign(val=1).pivot_table(
index=['movie_id',
'user_id',
'rated_value'],
columns=['question_id',
'answer_id'],
values=['question_id', 'answer_id'],
fill_value=0)
затем объединить идентификатор вопроса и ответа, чтобы столбцы отображались как 1_1, 1_2
pivoted_df.columns = pivoted_df.columns.droplevel()
pivoted_df.columns = ['{}_{}'.format(l1, l2).strip() for l1, l2 in pivoted_df.columns.values]
pivoted_df = pivoted_df.reset_index()
movie_id user_id rating_value 1_1 1_2 1_3 1_4...
но при попытке добавить genre, user_gender, user_ethnicity
pivoted_df = df_to_pivot.assign(val=1).pivot_table(
index=['movie_id',
'user_id',
'rated_value'],
columns=['question_id',
'answer_id', 'genre', 'user_gender','user_ethnicity'],
values=['question_id', 'answer_id', 'genre', 'user_gender','user_ethnicity'],
fill_value=0)
это на самом деле не работает.
Моя цель - развернуть genre, user_gender, user_ethnicity
, как и остальные, поэтому столбцы будут
movie_id user_id rated_value 1_1 1_2 1_3 1_4...comedy, drama...,male, female, black, white, asian
output:
movie_id, user_id, rated_value , 1_1, 1_2, 1_3, 1_4, comedy, drama, male, female, white, black, asian
101, 345, 3.5, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0
Цель состоит в том, чтобы получить movie_id, пару user_id в строке и все остальное отразить на 1 и ноль.