我有两个Excel文件A和B。A是主副本,其中有员工姓名和组织名称(Name
和Org
)的更新记录。文件B包含Name
和Org
列,且记录较旧,还有许多我们不感兴趣的列。
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
我要执行以下操作。!
1)对于文件B中的所有现有条目(列Name
和Org
),我想将文件B与文件A进行比较,创建另外两列('Newemployee
'和'Org_change
')在文件B中。
Newemployee
下找不到Name条目,请Y
'更新'Name
'列。Org_change
”下的组织发生了变化,请Org
”列截止到现在,我同时拥有两个Dataframe以获取新的员工姓名 但没有获得进一步的线索
full_set = pd.concat([B, A]).drop_duplicates(subset=['Name'])
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
在删除重复项时,您可以选择不保留任何一个副本,这基本上意味着您仅保留唯一值。如果其中一个DataFrame是另一个的严格子集,这将为您提供更新。
diff_set = pd.concat([old, new]).drop_duplicates(subset=['Name'], keep=False)
您的索引似乎匹配得不好。如果遇到此问题,可能需要先设置索引。
diff_set = pd.concat([old.set_index("Org"), new.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)
最后一个reset_index
只是要还原为索引只是枚举计数器的格式。
编辑:
ll
Out[101]:
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
ll2
Out[102]:
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
5 Spam ddc systems
6 John ddc systems
7 Foo ddd systems
diff_set = pd.concat([ll.set_index("Org"), ll2.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)
diff_set
Out[104]:
Org Name
0 ddc systems Spam
1 ddc systems John
2 ddd systems Foo
我可以添加任意数量的员工,并且可以继续工作。 ^^