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

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

    Customer_Id   Day    Hour   Latitude   Longitude     
0.        a        dd     hh      x1         y1
1.        a        dd     hh'     x2         y2
2.        a        dd     hh'     x3         y3
3.        b        dd     hh'     x4         y4

И затем у меня есть объект (который я могу преобразовать в DataFrame при необходимости) с выборкой в ​​час в день на одного клиента изширота и долгота.Однако Customer_Id, Day и Hour являются здесь индексами, тогда как раньше их не было.Это выглядит примерно так:

                                 Latitude   Longitude
Customer_Id    Day     Hour
    a          dd       hh         x1         y1
               dd       hh'        x3         y3
    b          dd       hh'        x4         y4

Ранее у меня было два кадра данных с одним индексом в каждом (давайте назовем их df1 для первого, который здесь является первым, и df2 для второго, чтоединственный индексный фрейм данных, который у меня был вместо второго объекта), поэтому я использовал:

df1['Latitude']= np.where((~df1.index.isin(df2.index)), np.nan, df1['Latitude'])

Раньше этот код работал, но теперь в этом новом сценарии он возвращает эту ошибку:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

Я попытался изменить код соответствующим образом, но он не работает.Может ли кто-нибудь взглянуть на это?

1 Ответ

2 голосов
/ 01 апреля 2019

Вам нужно сбросить свой индекс с помощью DataFrame.reset_index:

df1['Latitude']= np.where((~df1.index.isin(df2.reset_index().index)), np.nan, df1['Latitude'])

print(df1)
  Customer_Id Day Hour Latitude Longitude
0           a  dd   hh       x1        y1
1           a  dd  hh'       x2        y2
2           a  dd  hh'       x3        y3
3           b  dd  hh'      NaN        y4

Что делает reset_index ?
Преобразует индексы обратно в столбцы:

print(df2.reset_index())
  Customer_Id Day Hour Latitude Longitude
0           a  dd   hh       x1        y1
1           a  dd  hh'       x3        y3
2           b  dd  hh'       x4        y4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...