簡體   English   中英

熊貓內部與Lambda加入

[英]Pandas Inner Join with Lambda

我有以下兩個框架:

幀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

而且,我有一個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

是否有一個優雅的解決方案?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM