簡體   English   中英

按最近的坐標合並數據幀

[英]Merge dataframes by closest coordinates

想象一下,我們有 2 個坐標為 ['X','Y'] 的數據框:

df1:

 X            Y          House №
2531        2016           175
2219        2196           11
2901        3426           201
6901        4431           46
7891        1126           89

df2:

 X            Y      Delivery office №
2534        2019            O1
6911        4421            O2
2901        3426            O3
7894.5      1120            O4 

我的想法是合並它們並得到:

df3

 X            Y          House №    Delivery office №
2531        2016           175            01
2219        2196           11             NA
2901        3426           201            03
6901        4431           46             02
7891        1126           89             04

所以我們想通過閾值來實現'模糊'合並(這個參數應該由用戶給出)。 您可以看到門牌號 11 沒有獲得任何送貨辦公室編號,因為它離 df2 中所有呈現的辦公室很遠。

所以我需要來自 df2 的所有行“find”它是離 df1 最接近的行,並將它的“成本”值添加到它你可以看到通常的內置 pd.merge 在那里不起作用,以及實現模糊邏輯的自定義包與使用 levenshtein 距離等的字符串值

沒有靈丹妙葯,但一種方法是使用pd.cut類別中的 Y 值。 使用這種方法,它會將值放在不同的 bin 中。 您需要手動調整 bin,例如將其設置為 20。

加載數據:

df1 = pd.DataFrame({'X':[2531, 2219, 2901, 6901, 7891], 'Y':[2016, 2196, 3426, 4431, 1126], 'House':['A', 'B', 'J', 'A', 'A']})

df2 = pd.DataFrame({'X':[2534, 6911, 2901, 7894.5], 'Y':[2019, 4421, 3426, 1120], 'Cost':[1200, 3100, 800, 600]})

創建新類別:

df1['Y2'] = pd.cut(df1['Y'], 20, labels=False)

df2['Y2'] = pd.cut(df2['Y'], 20, labels=False)

df3 = pd.merge(df1, df2, on=['Y2'], how='left')

暫無
暫無

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

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