Nazrin Guliyeva
Nazrin Guliyeva

Reputation: 145

Dataframe replace with another row, based on condition

I have a dataframe like the following:

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

I want to replace 0 "product_resource_id"s with an id where "ean"s are same.

I want to get a result like:

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

Any help would be really helpful. Thanks in advance!

Upvotes: 0

Views: 31

Answers (1)

jezrael
jezrael

Reputation: 863611

Idea is filter rows with 0 values in product_resource_id, remove duplicates by ean column if exist and create Series by DataFrame.set_index for mapping, if no match values are replace by original by values by Series.fillna, because non match values return NaNs:

#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

Upvotes: 1

Related Questions