Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Map dataframe with multiple columns as keys pandas

Tags:

python

pandas

>>> p1.head()           
   StreamId            Timestamp    SeqNum
0         3  1490250116391063414  1158
1         3  1490250116391348339  3600
2         3  1490250116391542829  3600
3         3  1490250116391577184  1437
4         3  1490250116392819426  1389


>>> oss.head()
   OrderID    Symbol  Stream     SeqNo
0  5000000  AXBANK       3      1158
1  5000001  AXBANK       6      1733
2  5000002  AXBANK       6      1244
3  5000003  AXBANK       6      1388
4  5000004  AXBANK       3      1389

How can this be merged using 2 attributes as key (SeqNum and StreamId)

>>> merge
   OrderID    Symbol  Stream     SeqNo    Timestamp
0  5000000  AXBANK       3      1158      1490250116391063414
1  5000001  AXBANK       6      1733      NaN
2  5000002  AXBANK       6      1244      NaN
3  5000003  AXBANK       6      1388      NaN
4  5000004  AXBANK       3      1389      1490250116392819426

I tried using

oss['Time1'] = oss['SeqNo'].map.((p1.set_index('SeqNum')['Timestamp']))

But I need to include both (SeqNum-SeqNo & Stream-StreamId)as keys I know this can be easy if I rename column names same in both dataframes and use merge but I want to avoid that. I should rather use something generic like (take THIS dataframe, map THESE columns to THOSE columns IN ANOTHER DATAFRAME and fetch required coulmns)

like image 579
pythonRcpp Avatar asked Sep 06 '25 03:09

pythonRcpp


1 Answers

Using join

oss.join(p1.set_index(['StreamId', 'SeqNum']), on=['Stream', 'SeqNo'])

   OrderID  Symbol  Stream  SeqNo     Timestamp
0  5000000  AXBANK       3   1158  1.490250e+18
1  5000001  AXBANK       6   1733           NaN
2  5000002  AXBANK       6   1244           NaN
3  5000003  AXBANK       6   1388           NaN
4  5000004  AXBANK       3   1389  1.490250e+18
like image 143
piRSquared Avatar answered Sep 07 '25 19:09

piRSquared