【发布时间】:2019-08-30 08:45:12
【问题描述】:
我正在准备一个数据框来存储员工技能的变化。
我想比较带有以下标签的两个表:“员工姓名”、“技能名称”、“年份”和“分数”。在第二年雇用了一些员工,并增加了一些技能。我想检查两个数据框中是否缺少员工或技能并填补空白,以便数据框的形状相同。
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 对象
【问题讨论】:
-
什么是
df1.index和ds2.index在您尝试比较之前?它们匹配吗? -
出现这个错误:Lengths must match to compare
-
是的,但是你能发布比较之前的
ds1.index和ds1.index是什么,即在dsBool = (ds1 != ds2).stack()之前 -
python Int64Index([567, 14, 505, 504, 13, 12, 566, 11, 503, 10, ... 806, 740, 739, 738, 737, 807, 736, 646, 497, 805], dtype='int64', length=825) Int64Index([ 778, 13, 539, 12, 11, 10, 538, 954, 956, 955, ... 1242, 1241, 1244, 1240, 1239, 1123, 951, 950, 1238, 768], dtype='int64', length=1289) -
如果您提供两个数据框的样本,会更容易回答。