#python #pandas #dataframe #merge
Вопрос:
Если один из моих фреймов данных даст мне некоторую информацию об элементах:
itemId property_1 property_2 property_n Decision 0 i1 88.90 NaN 0 1 1 i2 87.09 7.653800e 06 0 0 2 i3 78.90 7.623800e 06 1 1 3 i4 93.02 NaN 1 0 ...
А другой дает мне некоторую информацию о том, как пользователи взаимодействовали с элементами:
userId itemId Decision 0 u1 i1 0 1 u1 i2 1 2 u2 i1 1 3 u2 i3 0 4 u2 i4 1 5 u3 i5 0 ...
Меня интересует прогнозирование Decision
, что легко сделать, если я работаю с каждым фреймом данных отдельно. Но могу ли я каким-то образом включить второй в первый, учитывая, что во втором каждый item
из них появляется несколько раз с разными Decisions
?
Я хотел бы иметь что-то вроде:
itemId property_1 property_2 property_n u1_decision ... Decision 0 i1 88.90 NaN 0 0 1 1 i2 87.09 7.653800e 06 0 1 0 2 i3 78.90 7.623800e 06 1 NaN 1 4 i4 93.02 NaN 1 NaN 0 ...
Таким образом, каждый пользователь становится столбцом, что приводит к чему-то очень редкому. Первый вопрос будет заключаться в том, имеет ли это смысл , а второй вопрос будет заключаться в том, как объединить строки из второго фрейма данных в виде столбцов в первый (я знаю, как df.merge
Decision
это сделать, но это не дает мне желаемого результата).
Комментарии:
1. Поскольку их много к одному, вам необходимо создать столбцы агрегации для элемента, которые могут быть суммами или частотой и т. Д..
Ответ №1:
Вы можете pivot
второй стол, как:
df.pivot(index='itemId', columns='userId', values='Decision').reset_index()
Тогда вы можете merge
продолжить itemId
.
Комментарии:
1. Но теперь столбец индекса имеет имя userId, но в конце концов он работает.
2. Да, забавные панды индексируют.