如何比较 pandas 中的两个 dataframe


通常,您可能有兴趣比较两个 panda DataFrame 之间的值以发现它们的相似点和差异。

本教程解释了如何操作。

示例:比较 Pandas 中的两个 DataFrame

假设我们有以下两个 panda DataFrame,每个 DataFrame 包含四名篮球运动员的数据:

 import pandas as pd

#define DataFrame 1
df1 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'],
                   'points': [12, 15, 17, 24],
                   'assists': [4, 6, 7, 8]})
df1


        player points assists
0 to 12 4
1 B 15 6
2 C 17 7
3 D 24 88

#define DataFrame 2
df2 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'],
                    'points': [12, 24, 26, 29],
                    'assists': [7, 8, 10, 13]})
df2

	player points assists
0 to 12 7
1 B 24 8
2 C 26 10
3 D 29 13

示例1:判断两个DataFrame是否相同。

我们首先可以使用DataFrame.equals()函数找出两个 DataFrame 是否相同:

 #see if two DataFrames are identical
df1. equals (df2)

False

两个 DataFrame 不包含完全相同的值,因此该函数正确返回False

示例 2:查找两个 DataFrame 之间玩家统计数据的差异。

我们可以使用pandas的subtract()函数找出每个球员的助攻和得分之间的差异:

 #subtract df1 from df2
df2. set_index ('player'). subtract (df1.set_index('player'))

	assist points
player		
At 0 3
B 9 2
C 9 3
D 5 5

对此的解释方法是:

  • 玩家 A 在两个 DataFrame 中的得分相同,但他在 DataFrame 2 中多了 3 次助攻。
  • 与 DataFrame 1 相比,玩家 B 在 DataFrame 2 中多得分 9 次,助攻多 2 次。
  • 与 DataFrame 1 相比,玩家 C 在 DataFrame 2 中多得分 9 次,助攻多 3 次。
  • 与 DataFrame 1 相比,玩家 D 在 DataFrame 2 中多得分 5 次,助攻多 5 次。

示例 3:查找仅存在于单个 DataFrame 中的所有行。

我们可以使用以下代码来获取仅出现在单个 DataFrame 中的完整行列表:

 #outer merge the two DataFrames, adding an indicator column called 'Exist'
diff_df = pd. merge (df1, df2, how=' outer ', indicator=' Exist ')

#find which rows don't exist in both DataFrames
diff_df = diff_df. loc [diff_df[' Exist '] != ' both ']
diff_df

	player points assists Exist
0 A 12 4 left_only
1 B 15 6 left_only
2 C 17 7 left_only
3 D 24 8 left_only
4 A 12 7 right_only
5 B 24 8 right_only
6 C 26 10 right_only
7 D 29 13 right_only

在这种情况下,两个 DataFrame 不共享相同的行,因此总共 8 行仅出现在其中一个 DataFrame 中。

标记为“Exist”的列方便地告诉我们每行唯一出现在哪个 DataFrame 中。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注