Pandas:如何逐行比较两个 dataframe
您可以使用以下方法逐行比较两个 pandas DataFrame:
方法 1:比较 DataFrame 并仅保留有差异的行
df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )
方法 2:比较 DataFrame 并保留所有行
df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )
以下示例展示了如何将每种方法与以下 pandas DataFrame 一起使用:
import pandas as pd #create first DataFrame df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D'], ' points ': [18, 22, 19, 14], ' assists ': [5, 7, 7, 9]}) print (df1) team points assists 0 to 18 5 1 B 22 7 2 C 19 7 3 D 14 9 #create second DataFrame df2 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'E'], ' points ': [18, 30, 19, 20], ' assists ': [5, 7, 7, 9]}) print (df2) team points assists 0 to 18 5 1 B 30 7 2 C 19 7 3 E 20 9
示例 1:比较 DataFrame 并仅保留有差异的行
下面的代码展示了如何逐行比较两个 DataFrame 并仅保留至少一列中存在差异的行:
#compare DataFrames and only keep rows with differences
df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )
#view results
print (df_diff)
team points
1 coil B 22
other B 30
3 choke D 14
other E 20
我们可以看到 DataFrame 有两个不同的行。
特别是,我们可以看到每个DataFrame的索引位置1和3处的行至少有一列具有不同的值。
self行中的值显示第一个 DataFrame 的值,而另一行中的值显示第二个 DataFrame 的值。
例如,我们可以看到:
- 第一个 DataFrame 索引位置 1 处的行在球队列中包含B ,在点数列中包含22 。
- 第二个 DataFrame 索引位置 1 处的行在球队列中包含B ,在点数列中包含30 。
注意: keep_equal=True参数告诉 pandas 保持值相等。否则,相等的值将显示为 NaN。
示例 2:比较 DataFrame 并保留所有行
以下代码演示了如何使用keep_shape=True参数逐行比较两个 DataFrame 并保留原始 DataFrame 中的所有行:
#compare DataFrames and keep all rows
df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )
#view results
print (df_diff)
team points assists
0 choke A 18 5
other A 18 5
1 coil B 22 7
other B 30 7
2 choke C 19 7
other C 19 7
3 choke D 14 9
other E 20 9
生成的 DataFrame 包含原始 DataFrame 的所有行和列。
注意#1 : compare()函数假设两个 DataFrame 具有相同的维度。
注意#2:您可以在此处找到 pandas Compare()函数的完整文档。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务: