比较来自两个不同数据框的列元素,其中条件基于熊猫函数

时间:2018-06-26 06:56:51

标签: python pandas dataframe

我有两个数据帧,其中df1.bbox_coldf2.bbox_col是它们的列之一,如下所示:

df1.bbox_col:

          bbox_col
 0   [20, 30, 40, 50]
 1   [5, 15, 48, 90]
 2   [111, 72, 51, 18]

df2.bbox_col:

          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_val > thresh,则在数据框中更新df1[index1][bbox_col] = df2[index2][bbox_col]

否则,如果float_val < thresh,则将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)

所以基本上,我想做的是检查特定元素是否符合条件并替换它,或者将第二个数据帧的行附加到第一个。

我正试图摆脱以下两个问题:

  1. 我看到我的代码多次追加行。可能是因为嵌套循环(但是我无法查明或纠正这种情况)。
  2. 我一直在寻找实现这一目标的更优化或矢量化的方式

我当时正在考虑使用df.apply()之类的函数来执行此操作,但是它仅占用一个数据帧。

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

0 个答案:

没有答案