正在使用.np.isclose用于比较两个数据帧的函数



我有两个大小相同、变量相同的数据帧。

df1 size: (50, 3) 
df2 size: (50, 3)

在我的代码中,我使用np.isclose函数返回一个布尔数组,其中两个数组在容差内元素相等,如下所示:

feature_1 = np.isclose(df1["SepalLengthCm"], df2["SepalLengthCm"], atol=10)
feature_2 = np.isclose(df1["SepalWidthCm"], df2["SepalWidthCm"], atol=20)
feature_3 = np.isclose(df1["PetalLengthCm"], df2["PetalLengthCm"], atol=30)

代码运行正常,没有任何错误。但对我来说,问题是我想让这个过程更加通用和自动化。换句话说,它应该与任何其他数据集一起工作。

重要的是,我不想在代码中指定列名。所以我想使用for循环来自动迭代每一列,并做同样的事情。

我不想像feature_1feature_2feature_3那样为每列写三个代码(行(,而是想写一个代码(线(来为任意数量的列做同样的工作。类似这样的东西:

feature = np.isclose(df1[columnn], df2[columnn], atol=i)

atol的参数也应该预先定义,例如i = [10, 20, 30]

您可以定义一个包含所需循环的函数,并将其称为一行:

def compare_isclose(df1, df2, atol_list):
feature_list = []
for i, col in enumerate(df1.columns):
feature_list.append(np.isclose(df1[col], df2[col], atol=atol_list[i]))
feature_df = pd.DataFrame.from_records(feature_list).T
return feature_df

该功能可以这样使用:

atol_list = [10,20,30]
feature_df = compare_isclose(df1, df2, atol_list)

它只在假设atol_list中的元素数量等于数据帧中的列数量,并且两个数据帧的列名相同的情况下工作。

最新更新