Вменение строки пропущенных значений с использованием условия (pandas DataFrame) - PullRequest
0 голосов
/ 15 апреля 2020

Набор данных Kaggle (работает над) - Newyork Airbnb

Создан с кодом необработанных данных для более подробного объяснения проблемы

`airbnb= pd.read_csv("https://raw.githubusercontent.com/rafagarciac/Airbnb_NYC-Data-Science_Project/master/input/new-york-city-airbnb-open-data/AB_NYC_2019.csv")

airbnb[airbnb["host_name"].isnull()][["host_name","neighbourhood_group"]]

` DataFrame

Я хотел бы заполнить нулевые значения «host_name» на основе сущностей столбца «neighbourhood_group». как

if airbnb['host_name'].isnull():
   airbnb["neighbourhood_group"]=="Bronx"
   airbnb["host_name"]= "Vie"

elif:
        airbnb["neighbourhood_group"]=="Manhattan"
        airbnb["host_name"]= "Sonder (NYC)"
    else:
        airbnb["host_name"]= "Michael"

(это неправильно, просто для представления желаемого выходного формата)

Я пытался использовать выражение if, но не смог правильно применить. Не могли бы вы мне решить эту проблему.

Спасибо

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

Вы можете попробовать это -

airbnb.loc[(airbnb['host_name'].isnull()) & (airbnb["neighbourhood_group"]=="Bronx"), "host_name"] = "Vie"
airbnb.loc[(airbnb['host_name'].isnull()) & (airbnb["neighbourhood_group"]=="Manhattan"), "host_name"] = "Sonder (NYC)"
airbnb.loc[airbnb['host_name'].isnull(), "host_name"] = "Michael"
1 голос
/ 15 апреля 2020

Pandas имеет специальный метод для заполнения значений NA:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

Вы можете создать dict со значениями для поля "host_name", используя " Соседство_группа "значения в качестве ключей и сделать это:

host_dict = {'Bronx': 'Vie', 'Manhattan': 'Sonder (NYC)'}     
airbnb['host_name'] = airbnb['host_name'].fillna(value=airbnb[airbnb['host_name'].isna()]['neighbourhood_group'].map(host_dict))
airbnb['host_name'] = airbnb['host_name'].fillna("Michael")

аргумент" значение "здесь может быть Серия значений.

Итак, прежде всего, мы создаем Ряд со значениями "neighbourhood_group", которые соответствуют нашим пропущенным значениям, используя эту часть:

neighbourhood_group_series = airbnb[airbnb['host_name'].isna()]['neighbourhood_group'] 

Затем, используя функцию map вместе с "host_dict", мы получаем Series со значениями, которые мы хочу вменять:

neighbourhood_group_series.map(host_dict)

Наконец, мы просто вменяем во все другие ячейки NA какое-то значение по умолчанию, в нашем случае "Michael".

0 голосов
/ 15 апреля 2020

Вы можете сделать это с:


ornek = pd.DataFrame({'samp1': [None, None, None],
                     'samp2': ["sezer", "bozkir", "farkli"]})

def filter_by_col(row):
    if row["samp2"] == "sezer":
        return "ping"
    if row["samp2"] == "bozkir":
        return "pong"
    return None

ornek.apply(lambda x: filter_by_col(x), axis=1)

...