python - 如何比较两个数据帧并返回有差异的列?

标签 python pandas

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

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

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 对象

最佳答案

据了解,形状误差是由于新员工的增加和现有员工的技能更新造成的。要找出缺失值,您可以连接这些数据框,然后删除重复的条目。这样,剩下的唯一条目将是两个数据帧中不同的条目。

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

临时数据帧现在由最初 2 个数据帧中不同的所有条目组成。可以在其形状末尾匹配的数据框中搜索和编辑它们。

关于python - 如何比较两个数据帧并返回有差异的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723439/

相关文章:

python - 在 python 中将 timedelta 转换为 int 非常慢

python - 如何: Overlapping of gray dots colors in pygame

python - 根据多个 IF 条件使用新 ID 创建列

python - Pandas 函数太慢 - 使用 dict/numpy 优化?

python - 在 Keras 中使用 imagedatagenerator 添加更多训练数据集

python - pandas:如何正确堆叠我的数据?

python - 如何在 python 数据框中使用 pandas 移动值?

python - Python 中的 NTLM 身份验证

python - 迷宫里的小偷

python - 对元组数组进行排序