Skip to main content
 首页 » 编程设计

python之Pandas Inner 加入 Lambda

2025年05月04日20powertoolsteam

我有以下两个框架:

第 1 帧:

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

框架2:

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

而且,我有一个将 frame1.id 映射到 frame2.id 的 lambda 函数:

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 

有没有优雅的解决方案?

请您参考如下方法:

可以使用 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) 

输出:

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