0

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!

0

1 Answer 1

1

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
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.