Python 获取数据帧行,这些数据帧行包含的列中的值与另一个数据帧中相应列中的值相近

Python 获取数据帧行,这些数据帧行包含的列中的值与另一个数据帧中相应列中的值相近,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,我试图在每个数据帧中搜索发生率,其中每个数据帧中一个特定标记列下的两个值彼此接近,但我不知道如何做到这一点。我尝试过isin,但对于我在这里尝试做的事情来说,这似乎太有限了 这个问题的关键点就在附近。我不仅对数值完全相同的事件感兴趣 i、 e df1 df2 假设我对df1和df2中a彼此在+-3范围内的行感兴趣,那么我如何获得一个数据帧,该数据帧仅限于那些在另一行中a具有相应值的行,以便 df1 及 df2 ?这里有一个简单的方法: import numpy as np imp

我有两个数据帧,我试图在每个数据帧中搜索发生率,其中每个数据帧中一个特定标记列下的两个值彼此接近,但我不知道如何做到这一点。我尝试过isin,但对于我在这里尝试做的事情来说,这似乎太有限了

这个问题的关键点就在附近。我不仅对数值完全相同的事件感兴趣

i、 e

df1

df2

假设我对df1和df2中a彼此在+-3范围内的行感兴趣,那么我如何获得一个数据帧,该数据帧仅限于那些在另一行中a具有相应值的行,以便

df1

df2

?这里有一个简单的方法:

import numpy as np
import pandas as pd

THRESHOLD = 3
df1 = pd.DataFrame({'a': [10, 100, 1000, 5000, 6000]}, index=range(5))
df2 = pd.DataFrame({'a': [1, 150, 800, 1002, 5997]}, index=range(5))

m = np.abs(df1.a[:, np.newaxis] - df2.a[np.newaxis, :]) <= THRESHOLD
df1_close = df1[np.any(m, axis=1)]
df2_close = df2[np.any(m, axis=0)]

print('df1_close', df1_close, '', 'df2_close', df2_close, sep='\n')

行是否需要排序,以便
df1
中的第一行接近
df2
中的第一行,等等。?假设
df1
也包含一个1001;您需要在相应的行中重复1002,还是只需要与其他数据帧中的某个值接近的值序列?不需要对行进行排序。这些值只需要限制在每个df中的一个特定列中,但除此之外,在各个列中所有2个闭合值的任何实例都是我想要的,没有额外的警告。可能需要添加一些有关广播工作方式的信息(例如“请参阅”)。您还可以通过使用
abs
None
而不是
np.newaxis
,以及数组上的
.any
方法来摆脱
numpy
导入。@Alex风格问题,我想,导入numpy不会产生任何开销,因为它已经被熊猫使用了,实际执行的操作是相同的,但是是的,如果您愿意的话,您可以这样编写(我个人认为使用NumPy更清晰,特别是在
np.newaxis
)中)。同意!只是为OP提一下。
    a
0   1
1   150
2   800
3   1002
4   5997
    a
2   1000
4   6000
    a
3   1002
4   5997
import numpy as np
import pandas as pd

THRESHOLD = 3
df1 = pd.DataFrame({'a': [10, 100, 1000, 5000, 6000]}, index=range(5))
df2 = pd.DataFrame({'a': [1, 150, 800, 1002, 5997]}, index=range(5))

m = np.abs(df1.a[:, np.newaxis] - df2.a[np.newaxis, :]) <= THRESHOLD
df1_close = df1[np.any(m, axis=1)]
df2_close = df2[np.any(m, axis=0)]

print('df1_close', df1_close, '', 'df2_close', df2_close, sep='\n')
df1_close
      a
2  1000
4  6000

df2_close
      a
3  1002
4  5997