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