繁体   English   中英

如何比较两个数据框并返回具有差异的列?

[英]How to compare two dataframes and return a column with difference?

我正在准备一个数据框来存储员工技能的变化。

我想比较两个带有以下标签的表:“员工姓名”,“技能名称”,“年份”和“得分”。 第二年雇用了一些员工,并增加了一些技能。 我想检查两个数据框内是否缺少员工或技能并填补空白,以使数据框的形状相同。

dataset = dataset[['Employee Name', 'Skill Name', 'Year', 'Score']]

min_y = dataset['Year'].min()
max_y = dataset['Year'].max()

ds1 = ds1.sort_values(['Employee Name', 'Skill Name'], ascending=[True, False])
ds2 = ds2.sort_values(['Employee Name', 'Skill Name'], ascending=[True, False])

ds1 = dataset[dataset['Year']==min_y].reset_index().drop(['index'], axis=1).drop(['Year'], axis=1)
ds2 = dataset[dataset['Year']==max_y].reset_index().drop(['index'], axis=1).drop(['Year'], axis=1)

dsBool = (ds1 != ds2).stack()
dsdiff = pd.concat([ds1.stack()[dsBool], ds2.stack()[dsBool]], axis=1)
dsdiff.columns=["Old", "New"]

当前,由于两个DataFrame之间的形状差异,比较这两个表会导致错误:只能比较标记相同的DataFrame对象

在比较之前,请尝试确保两个数据帧的索引相同:

ds1 = dataset[dataset['Year']==min_y].drop(['Year'], axis=1).reset_index(drop=True)
ds2 = dataset[dataset['Year']==max_y].drop(['Year'], axis=1).reset_index(drop=True)

然后执行比较:

dsBool = (ds1 != ds2).stack()

编辑:

实际上,我认为您的原始帖子可能包含错误顺序的代码。 请尝试以下操作:

dataset = dataset[['Employee Name', 'Skill Name', 'Year', 'Score']]

dataset.sort_values(['Employee Name', 'Skill Name'], ascending=[True, False], inplace=True)

ds1 = dataset[dataset['Year'] == dataset['Year'].min()].drop(['Year'], axis=1).reset_index(drop=True)
ds2 = dataset[dataset['Year'] == dataset['Year'].max()].drop(['Year'], axis=1).reset_index(drop=True)

dsBool = (ds1 != ds2).stack()
dsdiff = pd.concat([ds1.stack()[dsBool], ds2.stack()[dsBool]], axis=1)
dsdiff.columns=["Old", "New"]

可以理解,形状错误是由于新员工的增加和现有员工技能的更新。 要找出丢失的值,可以将这些数据框合并,然后删除重复的条目。 这样,剩下的唯一条目将是在两个数据帧中都不同的条目。

temp = pd.concat((ds1, ds2), axis = 0)
temp = temp.drop_duplicates(subset = 'Employee Name', keep = False, inplace = True)
# keep = False ensures that all repeating entries are considered duplicates

现在,临时数据帧包含所有在前两个数据帧中不同的条目。 可以在形状匹配的数据框中搜索和编辑它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM