用多个列作为键Pandas映射数据帧

2024-10-02 22:35:21 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> 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

如何使用2个属性作为键(SeqNum和StreamId)将其合并

^{pr2}$

我试着用

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

但我需要将这两者(SeqNum SeqNo&Stream StreamId)都作为键 我知道,如果我重命名两个数据帧中相同的列名并使用merge,这会很容易,但我想避免这种情况。我应该使用一些通用的东西,比如(使用这个数据帧,将这些列映射到另一个数据帧中的那些列并获取所需的coulmns)


Tags: 数据stream属性osssymbolheadtimestampp1
2条回答

我想你需要^{}和{a2}:

print (pd.merge(oss, p1, left_on=['Stream','SeqNo'], 
                         right_on=['StreamId','SeqNum'],how='left')
          .drop(['StreamId','SeqNum'], axis=1))

   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

另一个具有rename列的解决方案:

^{pr2}$

使用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

相关问题 更多 >