Изменение значений в столбце на основе совпадения - PullRequest
1 голос
/ 04 августа 2020

У меня есть Pandas DataFrame, который содержит названия бразильских университетов, но кое-что у меня есть эти имена в кратком или долгом смысле (например, Федеральный университет Рио-де-Жанейро иногда идентифицируется как UFRJ). DataFrame выглядит так:

| college                                |
|----------------------------------------|
| Universidade Federal do Rio de Janeiro |
| UFRJ                                   |
| Universidade de Sao Paulo              |
| USP                                    |
| Catholic University of Minas Gerais    |

И у меня есть еще один, который имеет в отдельных столбцах короткое имя и длинное имя НЕКОТОРЫХ (не всех) этих университетов. Это выглядит примерно так:

| long_name                              | short_name |
|----------------------------------------|------------|
| Universidade Federal do Rio de Janeiro | UFRJ       |
| Universidade de Sao Paulo              | USP        |

Я хочу: заменить все короткие имена длинными именами, поэтому в этом контексте в первом фрейме данных столбец college будет изменен на это:

| college                                |
|----------------------------------------|
| Universidade Federal do Rio de Janeiro |
| Universidade Federal do Rio de Janeiro |
| Universidade de Sao Paulo              |
| Universidade de Sao Paulo              |
| Catholic University of Minas Gerais    | <--- note: this one does not have a match, so it stays the same

Есть ли способ сделать это, используя pandas и numpy (или любую другую библиотеку)?

1 Ответ

1 голос
/ 04 августа 2020

Используйте Series.map с заменой на секунду DataFrame, если нет совпадений, получите отсутствующие значения, поэтому добавляется Series.fillna:

df1['college'] = (df1['college'].map(df2.set_index('short_name')['long_name'])
                                .fillna(df1['college']))

print (df1)
                                  college
0  Universidade Federal do Rio de Janeiro
1  Universidade Federal do Rio de Janeiro
2               Universidade de Sao Paulo
3               Universidade de Sao Paulo
4     Catholic University of Minas Gerais
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...