首页 > 解决方案 > 比较从两个excel文件Dataframe创建的两个,基于该创建/更新新列

问题描述

我有两个excel文件,A和B。A是主副本,其中员工姓名和组织名称(NameOrg)的更新记录可用。文件 B 包含具有较旧记录NameOrg列以及我们不感兴趣的许多其他列。

   Name      Org
0   abc    ddc systems
1   sdc    ddc systems
2   csc    ddd systems
3   rdc    kbf org
4   rfc    kbf org

我要执行以下操作。!

1)对于文件 B 中的所有现有条目(列NameOrg),我想将文件 B 与文件 A 进行比较,在文件 B 中创建另外两列(' Newemployee' 和 ' Org_change')。

到目前为止,我已经连接了两个 Dataframe 以获得新的员工姓名,但没有进一步了解如何继续,

full_set = pd.concat([B, A]).drop_duplicates(subset=['Name'])

任何帮助将不胜感激。谢谢。

标签: pythonexcelpandas

解决方案


在删除重复项时,您可以选择不保留任何一个副本,这基本上意味着您只保留唯一值。如果其中一个 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

我可以添加任意数量的员工,它会继续工作。^^


推荐阅读