Сопоставление столбца без уникального идентификатора в pandas

#python #pandas

#питон #панды

Вопрос:

У меня есть два кадра данных , и я хочу сопоставить столбец от df2 до df1 , но у меня нет одного уникального столбца для использования в качестве индекса, поэтому я делаю следующее:

 df1['completion_time']=df1[['participant','Movement_type']].merge(df2,how='left').completion_time  

но конечный результат не совпадает с исходным кадром данных, что-то не так

df1

 participant vis total_time Movement_type  1194 8 24.747 A  1194 4 22.151 B  1190 8 28.853 A  1190 4 137.254 B  1197 8 21.244 A    

df2

 participant question completion_time Movement_type 1194 40 11.0 A 1194 34 0.0 C  1194 52 45.0 B 1190 52 30.0 B 1190 40 20.0 A 1197 34 0.0 C  

и я стремлюсь достичь этого: df3

 participant vis total_time Movement_type completion_time 1194 8 24.747 A 11.0  1194 4 22.151 B 45.0 1190 8 28.853 A 20.0 1190 4 137.254 B 30.0   

Ответ №1:

Просто используй df3 = pd.merge(df1, df2) . Это приводит к правильному df3 для меня:

 participant vis total_time Movement_type question completion_time 0 1194 8 24.747 A 40 11.0 1 1194 4 22.151 B 52 45.0 2 1190 8 28.853 A 40 20.0 3 1190 4 137.254 B 52 30.0   

Если вы хотите избавиться от ненужного столбца, просто объедините подмножество df2, в котором вы сохраняете нужные столбцы и столбцы, в которых вы объединяетесь.

pd.merge(df1, df2.drop(columns='question'))

 participant vis total_time Movement_type completion_time 0 1194 8 24.747 A 11.0 1 1194 4 22.151 B 45.0 2 1190 8 28.853 A 20.0 3 1190 4 137.254 B 30.0   

Комментарии:

1. Я получаю пустой фрейм данных, я думаю, нам нужно указать индекс, если мы хотим объединить, верно?

2. Проверьте свой код на наличие ошибок. Какую версию pandas вы используете?

3. моя текущая версия pandas: 1.3.0