Dataframe заменить на другую строку, в зависимости от условия - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть кадр данных, подобный следующему:

    ean           product_resource_id        shop
----------------------------------------------------
    123           abc                        xxl
    245           bed                        xxl
    456           dce                        xxl
    123           0                          conr
    245           0                          horec

Я хочу заменить 0 "product_resource_id" s идентификатором, где "ean" одинаковы.

Я хочу получить результат, как:

    ean           product_resource_id        shop
----------------------------------------------------
    123           abc                        xxl
    245           bed                        xxl
    456           dce                        xxl
    123           abc                        conr
    245           bed                        horec

Любая помощь будет очень полезна. Заранее спасибо!

1 Ответ

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

Идея состоит в том, чтобы фильтровать строки со значениями 0 в product_resource_id, удалить дубликаты по столбцу ean, если они существуют, и создать серии с помощью DataFrame.set_index для отображения, если никакие значения соответствия не заменяются исходными по значениям Series.fillna, поскольку несоответствующие значения возвращают NaN s:

#mask = df['product_resource_id'].ne('0')
#if 0 is integer
mask = df['product_resource_id'].ne(0)
s = df[mask].drop_duplicates('ean').set_index('ean')['product_resource_id']
df['product_resource_id'] = df['ean'].map(s).fillna(df['product_resource_id'])
print (df)
   ean product_resource_id   shop
0  123                 abc    xxl
1  245                 bed    xxl
2  456                 dce    xxl
3  123                 abc   conr
4  245                 bed  horec
...