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)