pandas 计算一个矩阵列中的不等式

eqqqjvef  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(122)

我有两个基本相同的 Dataframe 。
但是,在特定列中,某些行的值(浮点数)是不同的。
我想计算值不同的行数。
如果不是因为以下两件事,这项任务看起来相当简单

  • 它们是浮点数,因此正常的等式有时会对基本相同的两行给出不同的值

而最重要的

  • 该列有Nans。当我比较Nans时,它们被视为不同。我不想将两行的Nans计数为不相等,而是计数为相等。在计数中不应考虑它们

当一系列浮点数中有Nan时,如何比较这些浮点数

kuhbmx9i

kuhbmx9i1#

使用pandas中的roundcompare

import pandas as pd

d1 = {"col": [7.1, 2.0, 3.0, 4.0, None, 1.9, 1.3]}
d2 = {"col": [7.1, 2.5, 3.0, 4.0, None, 1.2, None]}

df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)

# to deal with the precision issue, say we want to round to 4 decimal place
df1["col"] = df1["col"].round(4)
df2["col"] = df2["col"].round(4)

# returns a dataframe with the differences
comparison = df1.compare(df2)

print(comparison)
print("different rows count:", len(comparison))

字符串
输出将是

col      
  self other
1  2.0   2.5
5  1.9   1.2
6  1.3   NaN
different rows count: 3

2lpgd968

2lpgd9682#

使用numpy.iscloseequal_nan=True参数,如果需要,通过rtol参数设置精度,最后计数True s使用sum

df = pd.DataFrame({'a':[np.nan, 10.12],
                   'b':[np.nan, 10.121231]})

out = np.isclose(df.a, df.b, equal_nan=True, rtol = 0.003)
print (out)
[ True  True]

print (out.sum())
2

different = len(out) - out.sum()
0

字符串

相关问题