Pandas与羔羊的内在结合

2024-03-28 18:32:35 发布

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

我有以下两个框架:

框架1:

            id
0  111-111-111
1  111-111-222
2  222-222-222
3  333-333-333

框架2:

^{pr2}$

我有一个lambda函数,它将frame1.id映射到frame2.id

id_map = lambda x: x[:7]

我的目标是在这两个表之间执行一个内部连接,但是要让id通过lambda。因此输出为:

            id    data
0  111-111-111    ones
1  111-111-222    ones
2  333-333-333  threes

我想出了一个相当不优雅的解决方案,几乎是完成了我要做的事情,但是当内部连接删除行时,它就会一团糟:

# Save a copy the original ids of frame1
frame1_ids = frame1['id'].copy()
# Apply the id change to frame1
frame1['id'] = frame1['id'].apply(id_map)
# Merge
frame1 = frame1.merge(frame2, how='inner', on='id')
# Set the ids back to what they originally were
frame1['id'] = frame1_ids

有没有一个优雅的解决方案?在


Tags: thetolambda函数框架ididsmap
1条回答
网友
1楼 · 发布于 2024-03-28 18:32:35

可以使用assign创建要加入的伪id列(newid):

frame1.assign(newid=frame1['id'].str[:7])
      .merge(frame2, left_on='newid', right_on='id', suffixes=('','_y'))
      .drop(['id_y','newid'], axis=1)

输出:

^{pr2}$

相关问题 更多 >