'how to update columns based on matching value in another table and write that column only in csv (pandas)

Hi I have 2 dataframes in python with different lengths as such:

Where I want to update the productList['new'] to inventoryList['new'] with matching product_id and non matching to be set to 0.

productList where 1 is new and 0 is not new

product_id new
1 1
2 0
3 1

inventoryList

product_id new
1 1
2 0
3 1
4 1
5 1

output

product_id new
1 1
2 0
3 1
4 0
5 0

and only update the new column to csv(inventory list)

I tried doing this

#update
inventoryList['new']=0
inventoryList['new'].update(productList['new'])

#write to csv
f = open(inventoryList, "w+")
f.close()
inventoryList.to_csv('dict/productsDict.csv', mode='a', index=False, header=True)

update returns it exactly on the number of rows only disregarding the product_id. How do I do a match update? The to csv also rewrites the whole thing. I just want to overwrite a particular column in the csv not append or overwrite the whole thing(is that possible?).



Solution 1:[1]

You need to make 'product_id' the index:

inventoryList = inventoryList.set_index('product_id')
productList = productList.set_index('product_id')
inventoryList['new']=0
inventoryList['new'].update(productList['new'])

output:

            new
product_id     
1             1
2             0
3             1
4             0
5             0

or using map:

inventoryList['new'] = (inventoryList['product_id']
                       .map(productList.set_index('product_id')['new']).fillna(0)
                       )

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mozway