簡體   English   中英

左邊加入大熊貓,大致相同的數字比較

[英]left join in pandas with approximately equal numeric comparison

我正在使用以下內容在Pandas中進行左聯接:

merged_left = pd.merge(left=xrf_df,
                       right=statistics_and_notes_df, 
                       how='left', 
                       left_on=depth_column_name, 
                       right_on='Core Depth')

但是,depth_column_name和'Core Depth'列是浮點數。 是否有一個很好的方法來做這個左連接,使得比較大致相等,如np.isclose()?

假設我們有以下DF:

In [111]: a
Out[111]:
      a  b  c
0  3.03  c  3
1  1.01  a  1
2  2.02  b  2

In [112]: b
Out[112]:
      a  x
0  1.02  Z
1  5.00  Y
2  3.04  X

讓我們將float64列加入為索引(已排序):

In [113]: a = a.sort_values('a').set_index('a')

In [114]: b = b.assign(idx=b['a']).set_index('idx').sort_index()

In [115]: a
Out[115]:
      b  c
a
1.01  a  1
2.02  b  2
3.03  c  3

In [116]: b
Out[116]:
         a  x
idx
1.02  1.02  Z
3.04  3.04  X
5.00  5.00  Y

現在我們可以使用DataFrame.reindex(...,method ='nearest')

In [118]: a.join(b.reindex(a.index, method='nearest'), how='left')
Out[118]:
      b  c     a  x
a
1.01  a  1  1.02  Z
2.02  b  2  1.02  Z
3.03  c  3  3.04  X

In [119]: a.join(b.reindex(a.index, method='nearest'), how='left').rename(columns={'a':'a_right'})
Out[119]:
      b  c  a_right  x
a
1.01  a  1     1.02  Z
2.02  b  2     1.02  Z
3.03  c  3     3.04  X

In [120]: a.join(b.reindex(a.index, method='nearest'), how='left').rename(columns={'a':'a_right'}).reset_index()
Out[120]:
      a  b  c  a_right  x
0  1.01  a  1     1.02  Z
1  2.02  b  2     1.02  Z
2  3.03  c  3     3.04  X

PS你可能想使用df.reindex(..., tolerance=<value>)參數來設置公差: abs(index[indexer] - target) <= tolerance

暫無
暫無

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

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