Как использовать .fillna () со словарем на основе условия - PullRequest
0 голосов
/ 28 сентября 2019

Я делаю некоторую очистку данных о недвижимости и столкнулся с этой проблемой новичка, которая, на удивление, кажется, что я не могу решить самостоятельно.

У меня есть этот кадр данных, который имеет значения nan в столбцах lat и lon.Я могу изобразить почти правильные значения, вводя среднее значение широты и долготы для данной окрестности.

Это пример, фактический DF имеет более 20 тыс. Строк.

    lat   lon    neighborhood
   -34.62 -58.50 Monte Castro
   -34.63 -58.36 Boca
    nan   nan    San Telmo

Я создал два словаря со значениями lat и lon для каждой окрестности со следующим кодом:

neighborhood_lat = []
neighborhood_lon = []
for neighborhood in df['l3'].unique():
    lat = df[((df['l3']==neighborhood) & (df['lat'].notnull()))].mean().lat
    lon = df[((df['l3']==neighborhood) & (df['lon'].notnull()))].mean().lon
    neighborhood_lat.append({neighborhood: lat})
    neighborhood_lon.append({neighborhood: lon})

Это часть одного из этих диктов:

 neighborhood_lat 
 [{'Mataderos': -34.65278757721805},
 {'Saavedra': -34.551813882357166},
 {nan: nan},
 {'Boca': -34.63204552441155},
 {'Boedo': -34.62695442446412},
 {'Abasto': -34.603728937455315},
 {'Flores': -34.62757516061659},
 {'Nuñez': -34.54843158034983},
 {'Retiro': -34.595564030955934},
 {'Almagro': -34.60692879236826},
 {'Palermo': -34.58274909271148},
 {'Belgrano': -34.56304387233704},
 {'Recoleta': -34.592081482406854},
 {'Balvanera': -34.608665174550694},
 {'Caballito': -34.61749059613885}

Затем я пытаюсь заполнить эти словари, но не могу понять, как задать условие дляfillna, поэтому он заполняет лат и долг в соответствии с широтой и долготой соседства.

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

    lat                         lon                       neighborhood
   -34.62                      -58.50                     Monte Castro
   -34.63                      -58.36                     Boca
    (mean lat of neighborhood) (mean lon of neighborhood) San Telmo

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 сентября 2019

Снова отвечая на мои вопросы ...

Я нашел правильный код для решения проблемы с помощью этого ответа: ответ

код:

создание словаря:

neighborhood_lat = {}
neighborhood_lon = {}

for neighborhood in df['l3'].unique():
    neighborhood_lat[neighborhood] = df[((df['l3']==neighborhood) & (df['lat'].notnull()))].mean().lat
    neighborhood_lon[neighborhood] = df[((df['l3']==neighborhood) & (df['lon'].notnull()))].mean().lon

заполнение значений nan словарем:

df['lat'] = df['lat'].fillna(df['l3'].map(neighborhood_lat))
df['lon'] = df['lon'].fillna(df['l3'].map(neighborhood_lon))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...