4个Pandas函数用于DataFrame的逐元素比较

通过示例解释。

NordWood Themes在Unsplash上的照片

Pandas数据框是带有标签行和列的二维数据结构。

作者提供的3行3列数据框

有时我们需要对两个数据框进行逐个元素的比较。例如:

  • 使用另一个数据框中的值更新数据框中的值。
  • 比较值并选择更大或更小的值。

在本文中,我们将学习四个不同的Pandas函数,可以用于这些任务。我们还将做出示例,以更好地理解它们之间的区别和相似之处。

让我们首先创建两个将在示例中使用的数据框。

import numpy as npimport pandas as pd# create DataFrames with random integersdf1 = pd.DataFrame(np.random.randint(0, 10, size=(4, 4)), columns=list("ABCD"))df2 = pd.DataFrame(np.random.randint(0, 10, size=(4, 4)), columns=list("ABCD"))# add a couple of missing valuesdf1.iloc[2, 3] = np.nandf1.iloc[1, 2] = np.nan
作者提供的数据框

1. combine

combine函数根据给定的函数进行逐个元素的比较。

例如,我们可以选择每个位置上两个值中的最大值。在我们做例子时,这将更清楚。

combined_df = df1.combine(df2, np.maximum)
作者提供的数据框

看一下第一行和第一列中的值。合并的数据框有5和2中的较大值。

如果其中一个值是NaN(即缺失值),则在此位置的合并数据框也有NaN,因为Pandas无法将值与缺失值进行比较。

我们可以使用fill_value参数选择要在缺失值情况下使用的常量值。在将其与另一个数据框中的值进行比较之前,缺失值将使用此值填充。

combined_df = df1.combine(df2, np.maximum, fill_value=0)
作者提供的数据框

df1中有两个NaN值,这些值被填充为0,然后与df2相同位置的值进行比较。

2. combine_first

combine_first函数使用另一个数据框中相同位置的值更新NaN值。

combined_df = df1.combine_first(df2)
作者提供的数据框

如上屏幕截图所示,combined_df 的值与 df1 相同,除了 NaN 值,这些值被 df2 的值填充。

需要注意的是,combine_first 函数不会更新 df1df2 中的值,它只返回第一个数据框的更新版本。

3. update

update 函数使用另一个数据框中相同位置的值来更新数据框中的缺失值。

听起来与 combine_first 函数所做的事情相同。但是,这里有一个重要的区别。

update 函数不返回任何东西,而是直接更新原数据框。因此,原始数据框被修改(或更新)。通过一个例子来更加清晰地说明。

我们有两个数据框,如下所示:

(image by author)

让我们在 df1 上使用 update 函数。

df1.update(df2)

这行代码不返回任何东西,但它更新了 df1。更新后的版本如下:

(image by author)

df1 不再包含缺失值,这些缺失值已经使用来自 df2 的值进行了更新。

4. compare

compare 函数比较相同位置的值,并返回一个数据框将它们并排显示。

comparison = df1.compare(df2)
(image by author)

如果特定位置上的值相同,则比较显示它们为 NaN(例如第二行第一列)。我们可以通过使用 keep_equal 参数来改变此行为。

comparison = df1.compare(df2, keep_equal=True)
(image by author)

结论

我们学习了四种不同的 Pandas 函数,可以对两个数据框中的值执行元素级比较。它们都有不同的目的。有些用于更新值,而有些只是进行比较。

会有一些情况下特定的函数是适合使用的,因此最好了解它们所有的函数。

您可以成为小猪AI会员,以解锁我的完整文章以及其他小猪AI的内容。如果您已经是会员,请不要忘记订阅,以便在我发布新文章时收到电子邮件通知。

感谢您的阅读。如果您有任何反馈,请告诉我。