我有一个包含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
答案 0 :(得分:2)
你能试试吗?在开头过滤
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.where时过滤它,所以你的df成了原始df的子集,但在你的np.where中,df仍然是原始的df,这就是为什么大小不同
24788:原始大小,9576:排除行的大小,其中列包含零
答案 1 :(得分:2)
我认为需要将所有蒙版链接在一起以获得相同大小的布尔掩码和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
答案 2 :(得分:0)
如何逐行比较两列中的浮点数?
我建议像这样使用pandas fix_versions = []
for version in issue["fields"]["fixVersions"]:
if version['name'][:8] == "Clignra ":
version_match = re.findall(r"(\d+\.\d+)\.\d+\.\d+", version['name'])
if version_match:
fix_versions.append(version_match[0])
print(fix_versions) # `['4.4', '4.4', '4.5']` etc. or similar
# or:
print("[{}]".format(", ".join(fix_versions))) # `[4.4, 4.4, 4.5]` etc.
:
apply