Python pandas比较新列中的2个数据帧输出新/删除/更改值

时间:2018-03-19 22:28:08

标签: python pandas

假设我有2个以下的数据帧

df1 =

userid  | first_name |  last_name   | title
-----------------------------------------------
u1  |   user1   |   test    |   manager

u2  |   user2   |   test    |   creator

u4  |   user4   |   test    |   Analysts


df2 =

userid |    first_name  |last_name  |title
----------------------------------------------
u1  |   user1   |   test    |   designer
u2  |   user2   |   test    |   creator
u3  |   user2   |   test    |   creator

我用过panda merge命令

pd.merge(df1,df2,how='outer',on=['userid','first_name','last_name','title'],indicator=True)

将df1与df2

进行比较时,我期待的结果是什么
userid  |first_name |last_name| title   |    status|
--------------------------------------------------
u1  |   user1   |   test    |       manager |   changed

u2  |   user2   |   test    |   creator |   Nochange

u3  |   user2   |   test    |   creator   |  Deleted

u4  |  user4    |   test    |   Analysts  | New

但是当我使用熊猫合并时我得到了什么

userid  |first_name|    last_name|  title   |   _merge

u1  |   user1       |test       |manager    |   left_only

u2  |   user2       |test   |   creator     |both

u3  |   user2       |test   |   creator   |  left_only

u1  |   user1       |test   |   designer |   rigth_only

所以在上面的输出中我可以看到_merge字段给我一些数据来过滤,但我需要找到一种方法来识别这3个以下项目的解决方案

  1. u1 userid显示两次(根据记录,df1中的'title'已更改,因此我需要在new或_merge列中将其显示为'changed')
  2. u3 user2 test creator - 我需要显示为已删除的行
  3. u4 user4测试分析师 - 需要显示为新行
  4. 知道如何实现所需的输出吗?任何帮助都非常感谢

1 个答案:

答案 0 :(得分:0)

我能够通过将问题分成两个步骤来匹配输出:

1)按userid,first_name,last_name和count记录分组。这些是已更改的记录 - 将_merge指示器设置为已更改。

2)过滤重复的userid,first_name,last_name记录并替换指标。

如果left_only将始终为“New”并且right_only将始终为“Deleted”(根据示例),并且在笔记本中,我试图引起对此的注意,这是有效的。 enter image description here

交互式: https://notebooks.azure.com/emican86/libraries/49373439

静态: https://github.com/emican86/49373439/blob/master/49373439.ipynb