【发布时间】:2018-02-12 19:29:46
【问题描述】:
我有以下两个框架:
第一帧:
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
有没有一个优雅的解决方案?
【问题讨论】:
-
frame1['id'] = frame1['id'].str.slice(7) -
@WillemVanOnsem 这实际上就是我对
frame1['id'] = frame1['id'].apply(id_map)所做的事情。但这并不能解决问题。 -
@AaronNBrock:但它更优雅,更高效。
-
@WillemVanOnsem 嗯,很高兴知道!然而,在实际用例中,lambda 比这更混乱,所以它不起作用。但是感谢您的提示!
标签: python pandas join lambda inner-join