熊猫中的逻辑比较产生误报

时间:2019-06-13 18:36:37

标签: python pandas dataframe rounding logical-operators

有一个问题,来自导入/计算的数据的逻辑比较给出了误报。我知道数字格式/类型一定是一个问题,但是我不知道如何解决。示例显示,即使X1 == X2对于X1

我试图根据给定的坐标存储在数据框中找到重叠的矩形。我从导入的值计算了坐标(X1,X2,Y1,Y2)。由于此df中的每一行都是一个矩形,因此我正在使用下面的代码过滤我的主df,以便找到任何重叠的矩形,但是在测试数据中得到了意外的结果,如果X1 == X2,<运算符将为true。

for i in range(len(df)):
     dftemp = df[(df.X1<=df.X1.iloc[i])&(df.X1.iloc[i]<df.X2)
                &(df.Y1<=df.Y1.iloc[i])&(df.Y1.iloc[i]<df.Y2)]
     dftemp = dftemp[df.index[i]!=dftemp.index]
     df_res2 = df_res2.append(dftemp)
     if len(dftemp) !=0:
          df_res2=df_res2.append(df.iloc[i])
          print("triggered at {} for{}".format(df.index[i],dftemp))

我知道数字格式/类型一定存在一些问题,但是我不确定如何继续,我试图四舍五入数字(即使坐标只到小数点后一位)并将其显式转换为浮点数比较之前,但没有任何效果。

示例:

下面是显示导入/计算的df列中的相关数据的示例。

In[307]:df_stk.loc[5020][['X1','X2','Y1','Y2']]

Out[307]: 
X1    1382.4
X2    1555.2
Y1      64.8
Y2       108

In[308]:df_stk.loc[7308][['X1','X2','Y1','Y2']]
Out[308]: 
X1      1296
X2    1382.4
Y1      43.2
Y2      86.4

In[309]: df_stk.loc[5020].X1 < df_stk.loc[7308].X2
Out[309]: True

您可以看到,即使在这些情况下X1 == X2,对于X1


d1={'X1':1382.4,
'X2':1555.2,
'Y1':64.8,
'Y2' :108}

d2={'X1':1296,
'X2':1382.4,
'Y1':43.2,
'Y2' :86.4}

In[303]: df_test=pd.DataFrame([d1,d2],index=[5020,7308])

Out[303]:
          X1      X2    Y1     Y2
5020  1382.4  1555.2  64.8  108.0
7308  1296.0  1382.4  43.2   86.4

In[304]: df_test.loc[5020].X1<df_test.loc[7308].X2
Out[304]: False

对于上面的示例,当我比较df中的数据时,我期望X1

0 个答案:

没有答案