Как мне сопоставить запись в столбце от одного df к другому df; и если они одинаковы, добавить запись в другой столбец от первого df до второго df? - PullRequest
0 голосов
/ 07 ноября 2018

КОНТЕКСТ:

У меня есть два кадра данных со следующими настройками:

df1 выглядит следующим образом ... и продолжается около 3500 строк:

| id1 | id2   | 
|:----|------:|
| a   | name1 |  
| b   | name2 | 
| c   | name3 | 
| d   | name4 | 
| e   | name5 |   
| f   | name6 |

df2 выглядит следующим образом ... и продолжается около 4000 строк и около 8 столбцов

| id1 | ranktrial1   | ranktrial2   | ...
|:----|-------------:|-------------:| ...
| a   | rank1        |rank1         | ...
| b   | rank2        |rank2         | ...
| c   | rank3        |rank3         | ...
| d   | rank4        |rank4         | ...
| e   | rank5        |rank5         | ...  
| f   | rank6        |rank6         | ...

ПРИМЕЧАНИЕ1: некоторые из идентификаторов id1 не имеют идентификаторов id2. Это означает, что они будут NaNs, когда они нанесены на карту; и я просто уроню их, когда доберусь до этого шага. Я не знаю, относится ли это к делу, но я просто хотел добавить его на случай, если это так.

ВОПРОС:

Мне нужно добавить / присоединить / поместить (не знаю правильный жаргон здесь) соответствующие имена id2 ко второму фрейму данных, если запись id1 == id1 в df2. Как мне это сделать?

Желаемый кадр данных будет выглядеть так:

| id1 | id2   | ranktrial1   | tranktrail2  | ...
|:----|------:|-------------:|-------------:| ...
| a   | name1 | rank1        | rank1        | ...  
| b   | name2 | rank2        | rank2        | ...
| c   | name3 | rank3        | rank3        | ...
| d   | name4 | rank4        | rank4        | ...
| e   | name5 | rank5        | rank5        | ...
| f   | name6 | rank6        | rank6        | ...

Я чувствую, как будто это действительно очень просто, и я немного глуп, потому что я начинающий Pythoner. Однако я не смог использовать ответы аналогичного вопроса для достижения своей цели. Вполне вероятно, что я виноват: p

Заранее спасибо за помощь!

правок изменено 4000 записей -> 4000 строк. Аналогично для 3500 записей

1 Ответ

0 голосов
/ 07 ноября 2018

Если после этого вы отбрасываете пропущенные биты, это внутреннее соединение и может быть выполнено с помощью merge. По умолчанию merge использует все обычно именуемые столбцы. В этом случае единственный обычно именуемый столбец - id1. Кроме того, how='inner' si также по умолчанию.

df1.merge(df2)

  id1    id2 ranktrial1 tranktrail2
0   a  name1      rank1       rank1
1   b  name2      rank2       rank2
2   c  name3      rank3       rank3
3   d  name4      rank4       rank4
4   e  name5      rank5       rank5
5   f  name6      rank6       rank6

Вы могли бы быть более явным с

df1.merge(df2, how='inner', on='id1')
...