Разумное объединение двух фреймов данных

#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. Да, забавные панды индексируют.