代码之家  ›  专栏  ›  技术社区  ›  tgcloud

比较从两个excel文件创建的两个Dataframe,在此基础上创建/更新新列

  •  0
  • tgcloud  · 技术社区  · 7 年前

    Name Org )是可用的。文件B包含 姓名 组织 记录稍旧的列和许多我们不感兴趣的其他列。

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

    我要执行以下操作。!

    姓名 ),我想比较文件B和文件A,再创建两列(' Newemployee '和' Org_change ')在文件B中。

    • 新员工 '带的列' Y 姓名
    • 组织变更 '带有'新组织名称(根据与表A的比较)'的栏,如果我们注意到下的组织发生了变化' 组织

    到现在为止,我已经在两个数据框中连接了concat来获取新的雇员名称 但没有得到进一步的线索,

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Uvar    7 年前

    在删除副本时,您可以选择不保留任何一个副本,这基本上意味着您只保留唯一的值。如果其中一个数据帧是另一个数据帧的严格子集,这将为您提供更新。

    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
    

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