Python сравнивает 2 столбца и записывает 4-й столбец со значениями из 1-го столбца, если столбец 3 соответствует столбцу 2 - PullRequest
3 голосов
/ 08 марта 2019

У меня есть 3 столбца в файле Excel. Я хотел бы сравнить значения в столбце 3 со значениями в столбце 2. Если значение существует в col2, запишите значение от col1 до col4. если значение не в столбце col2, напишите NA в столбце 4. col3 может иногда быть пустым значением, и в этом случае сравнивать нечего.

Пример: Файл Excel

col1    col2    col3
a2      2        4
1d      3        2
cc      5        3
12      4        1

Ожидаемый результат:

col1    col2    col3    col4
a2      2        4       12
1d      3        2       a2
cc      5        3       1d
12      4        1       NA

Все еще в стадии разработки. Указатель будет очень полезен, пожалуйста.

1 Ответ

2 голосов
/ 08 марта 2019

Использовать Series.map другим Series, созданным DataFrame.set_index, если не совпадает NaN по умолчанию:

df = pd.read_excel(file)

df['col4'] = df['col3'].map(df.set_index('col2')['col1'])
print (df)
  col1  col2  col3 col4
0   a2     2     4   12
1   1d     3     2   a2
2   cc     5     3   1d
3   12     4     1  NaN

Есливозможные дубликаты в col2, возникает ошибка:

InvalidIndexError: Переиндексация действительна только для уникальных объектов индекса

Решение добавляется DataFrame.drop_duplicates:

print (df)
  col1  col2  col3
0   a2     2     4
1   1d     2     2
2   cc     5     3
3   12     4     1

df['col4'] = df['col3'].map(df.drop_duplicates('col2').set_index('col2')['col1'])
print (df)
  col1  col2  col3 col4
0   a2     2     4   12
1   1d     2     2   a2
2   cc     5     3  NaN
3   12     4     1  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...