Python 比较两个不同数据帧中的列元素,其中条件基于表中的函数

Python 比较两个不同数据帧中的列元素,其中条件基于表中的函数,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,其中df1.bbox\u col和df2.bbox\u col是它们的一列,如下所示: for index1, row1 in df1: for index2, row2 in df2: if area(row1.bbox_col, row2.bbox_col) > thresh: df1.iloc[index1]['bbox_col'] = row2.bbox_col else: df

我有两个数据帧,其中
df1.bbox\u col
df2.bbox\u col
是它们的一列,如下所示:

for index1, row1 in df1:
    for index2, row2 in df2:
        if area(row1.bbox_col, row2.bbox_col) > thresh:
            df1.iloc[index1]['bbox_col'] = row2.bbox_col
        else:
            df1 = df1.append(df2.row)
df1.bbox\u col:

          bbox_col
 0   [20, 30, 40, 50]
 1   [5, 15, 48, 90]
 2   [111, 72, 51, 18]
          bbox_col
 0   [26, 62, 72, 56]
 1   [2, 18, 43, 95]
 2   [123, 90, 48, 51]
 3   [156, 76, 65, 97]
 4   [65, 76, 87, 32]
 5   [54, 78, 34, 56]
df2.bbox_col:

          bbox_col
 0   [20, 30, 40, 50]
 1   [5, 15, 48, 90]
 2   [111, 72, 51, 18]
          bbox_col
 0   [26, 62, 72, 56]
 1   [2, 18, 43, 95]
 2   [123, 90, 48, 51]
 3   [156, 76, 65, 97]
 4   [65, 76, 87, 32]
 5   [54, 78, 34, 56]
我有一个函数
area
,它接受两个边界框numpy数组并返回一个浮点值

def area(bbox1, bbox2):
    some operations...

    return float_val
我想将此函数应用于两列的所有元素,如果返回值大于
thresh
,即
float\u val>thresh
,则在数据帧中更新
df1[index1][bbox\u col]=df2[index2][bbox\u col

否则,如果
float\u val
,则将
df2.iloc[index2]
行附加到
df1

我试图通过迭代两个数据帧的行并进行如下比较来实现这一点:

for index1, row1 in df1:
    for index2, row2 in df2:
        if area(row1.bbox_col, row2.bbox_col) > thresh:
            df1.iloc[index1]['bbox_col'] = row2.bbox_col
        else:
            df1 = df1.append(df2.row)
所以基本上,我想做的是检查某个特定元素是否符合条件并替换它,或者将第二个数据帧的行附加到第一个数据帧

我正试图解决以下两个问题:

for index1, row1 in df1:
    for index2, row2 in df2:
        if area(row1.bbox_col, row2.bbox_col) > thresh:
            df1.iloc[index1]['bbox_col'] = row2.bbox_col
        else:
            df1 = df1.append(df2.row)
  • 我看到我的代码多次追加行。可能是因为嵌套循环(但我无法确定或纠正这一点)
  • 我正在寻找一种更优化或矢量化的方法来实现这一点
  • 我曾考虑使用像df.apply()这样的函数来实现这一点,但它只需要一个数据帧


    最后,我正在寻找类似的东西,但是
    on=
    pd.merge
    中的一个函数。…

    2注释。(1) 对于优化/矢量化方法,您需要使用NumPy数组或(至少)将列表系列扩展为4列。记住
    df。使用自定义函数应用
    永远不会矢量化。(2) 您是否不关心矢量化
    区域
    ?这很可能最终成为主要的瓶颈,但我们不知道它会起什么作用..@jpp,正如您所提到的。。。我实际上是在检查
    area
    func中两个bbox重叠的面积(百分比)。因此,我需要检查
    df2
    中每个bbox与
    df1
    中每个bbox的重叠区域。我期待在基于函数的列上使用
    df.merge
    。。。