Подтвердить что ты не робот

Добавление нового столбца pandas с отображаемым значением из словаря

Я пытаюсь сделать что-то, что должно быть действительно простым в pandas, но это ничего не значит. Я пытаюсь добавить столбец в существующую фреймворк pandas, который является отображаемым значением, основанным на другом (существующем) столбце. Вот небольшой тестовый пример:

import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001]} )
df["B"] = equiv(df["A"])
print(df)

Я надеялся, что следующее:

      A   B
0  7001   1
1  8001   2
2  9001   3

Вместо этого я получаю сообщение об ошибке, указывающее, что equiv не является вызываемой функцией. Достаточно справедливо, это словарь, но даже если я завершу его в функцию, я все равно получаю разочарование. Поэтому я попытался использовать функцию карты, которая, похоже, работает с другими операциями, но она также побеждена с помощью словаря:

df["B"] = df["A"].map(lambda x:equiv[x])

В этом случае я просто получаю KeyError: 8001. Я прочитал документацию и предыдущие сообщения, но еще не нашел ничего, что подсказывает, как смешивать словари с фреймами pandas. Любые предложения были бы с благодарностью.

4b9b3361

Ответ 1

Правильный способ сделать это будет df["B"] = df["A"].map(equiv).

In [55]:

import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001]} )
df["B"] = df["A"].map(equiv)
print(df)
      A  B
0  7001  1
1  8001  2
2  9001  3

[3 rows x 2 columns]

И он будет обрабатывать ситуацию, когда ключ не существует очень красиво, учитывая следующий пример:

In [56]:

import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001, 10000]} )
df["B"] = df["A"].map(equiv)
print(df)
       A   B
0   7001   1
1   8001   2
2   9001   3
3  10000 NaN

[4 rows x 2 columns]