Замените некоторые значения в кадре данных на NaN, если индекс строки не существует в другом кадре данных - PullRequest
0 голосов
/ 18 марта 2019

У меня действительно большой фрейм данных, похожий на этот:

     CustomerId   Latitude   Longitude     
0.        a        x1         y1
1.        a        x2         y2
2.        b        x3         y3
3.        c        x4         y4

И у меня есть второй фрейм данных, который соответствует образцу первого, например:

     CustomerId   Latitude   Longitude     
0.        a         x1         y1
3.        c         x4         y4

Моя цель - получить новый фрейм данных, такой же, как оригинал, но с NaN вместо координат строк с индексами, которых нет на втором фрейме данных. Вот результат, который мне нужен:

     CustomerId   Latitude   Longitude     
0.        a        x1         y1
1.        a        NaN        NaN
2.        b        NaN        NaN
3.        c        x4         y4

Я новичок в Python и не нашел ни одного вопроса, подобного этому. У кого-нибудь есть идеи, как это решить?

1 Ответ

1 голос
/ 18 марта 2019

Сначала мы создаем маску с pandas.DataFrame.isin

После этого мы используем np.where и запрашиваем противоположное с ~

mask = df.CustomerId.isin(df2.CustomerId)

df['Latitude']  = np.where(~mask, np.NaN, df['Latitude'])
df['Longitude'] = np.where(~mask, np.NaN, df['Longitude'])

print(df)
    CustomerId Latitude Longitude
0.0          a       x1        y1
1.0          a       x2        y2
2.0          b      NaN       NaN
3.0          c       x4        y4

Объяснение
np.where работает следующим образом: np.where(condition, value if true, value if false)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...