0

I have two dataframes. One is the basevales (df) and the other is an offset (df2). How do I create a third dataframe that is the first dataframe offset by matching values (the ID) in the second dataframe?

This post doesn't seem to do the offset... Update only some values in a dataframe using another dataframe

import pandas as pd
  
# initialize list of lists
data = [['1092', 10.02], ['18723754', 15.76], ['28635', 147.87]]
df = pd.DataFrame(data, columns = ['ID', 'Price'])
  

offsets = [['1092', 100.00], ['28635', 1000.00], ['88273', 10.]]
df2 = pd.DataFrame(offsets, columns = ['ID', 'Offset'])


print (df)
print (df2)



>>> print (df)
         ID   Price
0      1092   10.02
1  18723754   15.76     # no offset to affect it
2     28635  147.87    

>>> print (df2)
      ID   Offset
0   1092   100.00
1  28635  1000.00
2  88273    10.00    # < no match

This is want I want to produce: The price has been offset by matching

         ID    Price
0      1092   110.02
1  18723754    15.76
2     28635  1147.87

I've also looked at Pandas Merging 101

I don't want to add columns to the dataframe, and I don;t want to just replace column values with values from another dataframe.

What I want is to add (sum) column values from the other dataframe to this dataframe, where the IDs match.

The closest I come is df_add=df.reindex_like(df2) + df2 but the problem is that it sums all columns - even the ID column.

Maxcot
  • 1,513
  • 3
  • 23
  • 51
  • Does this answer your question? [Pandas Merging 101](https://stackoverflow.com/questions/53645882/pandas-merging-101) – Asish M. Dec 12 '21 at 23:18
  • Not quite. I see df.update to replace column values and df.add to add entire columns.... or am I missing something? I want to add "in column" – Maxcot Dec 12 '21 at 23:28

1 Answers1

0

Try this :

df['Price'] = pd.merge(df, df2, on=["ID"], how="left")[['Price','Offset']].sum(axis=1)
AfterFray
  • 1,751
  • 3
  • 17
  • 22