4个Pandas函数用于DataFrame的逐元素比较
通过示例解释。

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

有时我们需要对两个数据框进行逐个元素的比较。例如:
- 使用另一个数据框中的值更新数据框中的值。
- 比较值并选择更大或更小的值。
在本文中,我们将学习四个不同的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
函数不会更新 df1
和 df2
中的值,它只返回第一个数据框的更新版本。
3. update
update
函数使用另一个数据框中相同位置的值来更新数据框中的缺失值。
听起来与 combine_first
函数所做的事情相同。但是,这里有一个重要的区别。
update
函数不返回任何东西,而是直接更新原数据框。因此,原始数据框被修改(或更新)。通过一个例子来更加清晰地说明。
我们有两个数据框,如下所示:

让我们在 df1
上使用 update
函数。
df1.update(df2)
这行代码不返回任何东西,但它更新了 df1
。更新后的版本如下:

df1
不再包含缺失值,这些缺失值已经使用来自 df2
的值进行了更新。
4. compare
compare
函数比较相同位置的值,并返回一个数据框将它们并排显示。
comparison = df1.compare(df2)

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

结论
我们学习了四种不同的 Pandas 函数,可以对两个数据框中的值执行元素级比较。它们都有不同的目的。有些用于更新值,而有些只是进行比较。
会有一些情况下特定的函数是适合使用的,因此最好了解它们所有的函数。
您可以成为小猪AI会员,以解锁我的完整文章以及其他小猪AI的内容。如果您已经是会员,请不要忘记订阅,以便在我发布新文章时收到电子邮件通知。
感谢您的阅读。如果您有任何反馈,请告诉我。