比较两个熊猫数据框架

cod*_*000 4 python numpy pandas

我有两个像这样定义的pandas数据帧:

_data_orig = [
    [1, "Bob", 3.0],
    [2, "Sam", 2.0],
    [3, "Jane", 4.0]
]
_columns = ["ID", "Name", "GPA"]

_data_new = [
        [1, "Bob", 3.2],
        [3, "Jane", 3.9],
        [4, "John", 1.2],
        [5, "Lisa", 2.2]
    ]
_columns = ["ID", "Name", "GPA"]

df1 = pd.DataFrame(data=_data_orig, columns=_columns)
df2 = pd.DataFrame(data=_data_new, columns=_columns)
Run Code Online (Sandbox Code Playgroud)

我需要找到以下信息:

  • 查找删除,其中df1是原始数据集,df2是新数据集
  • 我需要找到两者之间现有记录的行更改.示例ID == 1应比较df2的ID == 1,以查看是否为每行更改了任何列值.
  • 找到df2 verse df1的任何添加内容.返回示例[4,"John",1.2]和[5,"Lisa",2.2]

为了找到行中的变化,我想我可以查看df2并检查df1,但这似乎很慢,所以我希望在那里找到更快的解决方案.

对于其他两个操作,我真的不知道该怎么做,因为当我尝试比较我得到的两个数据帧时:

ValueError: Can only compare identically-labeled DataFrame objects

熊猫版:'0.16.1'

建议?

piR*_*red 5

建立

m = df1.merge(df2, on=['ID', 'Name'], how='outer', suffixes=['', '_'], indicator=True)
m
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

增加

m.loc[m._merge.eq('right_only')]
要么
m.query('_merge == "right_only"')

在此输入图像描述

删除

m.loc[m._merge.eq('left_only')]
要么
m.query('_merge == "left_only"')

在此输入图像描述


0.16.1 回答

建立

m = df1.merge(df2, on=['ID', 'Name'], how='outer', suffixes=['', '_'])
m
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

增加

m.loc[m.GPA_.notnull() & m.GPA.isnull()]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

删除

m.loc[m.GPA_.isnull() & m.GPA.notnull()]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述