检查Python中的浮子柱的平等性



i有一个带有2列的数据框架。我首先排除列包含零的行,然后想检查每行,如果列的元素相等。

我尝试了:

df.loc[(df['col1'] != 0.0) & (df['col2'] != 0.0), 'Error'] = np.where(assert_almost_equal(df['col1'], df['col2']), 'Not equal', '')

结果是:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

也尝试了:

np.where(df['col1'] == df['col2'], 'Not equal', '')

np.where(df.col1.eq(df.col2), 'Not equal', '')

结果是:

ValueError: shape mismatch: value array of shape (24788,) could not be broadcast to indexing result of shape (9576,)

,还尝试了apply-功能。

如何按行中的两列中的浮子进行比较?我确实需要平等,而不是isclose或类似的东西。

谢谢,

mamo

我认为需要链条将所有面具一起使用相同尺寸的布尔面具和 DataFrame,以避免使用shape mismatch valueError,并且不要更改DataFrame的原始大小:

df = pd.DataFrame({'col1':[0,5,4,5.7,5,4],
                   'col2':[0,0,9,5.7,2,3],
                   'col3':[1,3,5,7,1,0]})
#print (df)
mask=(df['col1'] != 0.0) & (df['col2'] != 0.0) & (df['col1'] == df['col2'])
df['Error'] = np.where(mask, 'Equal', 'Not equal')
print (df)
   col1  col2  col3      Error
0   0.0   0.0     1  Not equal
1   5.0   0.0     3  Not equal
2   4.0   9.0     5  Not equal
3   5.7   5.7     7      Equal
4   5.0   2.0     1  Not equal
5   4.0   3.0     0  Not equal

您可以尝试一下吗?在开始时过滤

df=df.loc[(df['col1'] != 0.0) & (df['col2'] != 0.0),:]
df['Error'] = np.where(assert_almost_equal(df['col1'], df['col2']), 'Not equal', '')

原因

valueerror:形状不匹配:形状的值数组(24788,(不可能是 广播形状的索引结果(9576,(

您在执行NP时过滤它,因此您的DF成为原始DF的子集,但是在您的NP中,DF仍然是原始DF,这就是为什么大小不同

24788:Origina尺寸,9576:排除行之后的尺寸,其中列包含ZEROS

如何通过行中的两列中的浮子进行比较?

我建议这样使用pandas apply这样:

def compare_floats(row):
    return row['col1'] == row['col2'] # you can use any comparison you want here
df['col3'] = df.apply(compare_floats, axis=1)

相关内容

  • 没有找到相关文章

最新更新