Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查找一列中值相同但另一列中值不同的记录_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何查找一列中值相同但另一列中值不同的记录

Python 如何查找一列中值相同但另一列中值不同的记录,python,pandas,dataframe,Python,Pandas,Dataframe,我有两只熊猫,它们的列名完全相同。其中一列名为id_number,它对每个表都是唯一的(我的意思是id_number在每个df中只能出现一次)。我想找到所有具有相同id_编号但在任何列中至少有一个不同值的记录,并将这些记录存储在新的数据库中 我尝试过合并(更具体地说是内部连接),但它只保留一条带有特定id_编号的记录,因此我无法查找两个dfs之间的任何差异 让我举一些例子来更清楚地解释: 示例dfs: 第一个DF: id_number name type city 1

我有两只熊猫,它们的列名完全相同。其中一列名为id_number,它对每个表都是唯一的(我的意思是id_number在每个df中只能出现一次)。我想找到所有具有相同id_编号但在任何列中至少有一个不同值的记录,并将这些记录存储在新的数据库中

我尝试过合并(更具体地说是内部连接),但它只保留一条带有特定id_编号的记录,因此我无法查找两个dfs之间的任何差异

让我举一些例子来更清楚地解释:

示例dfs:

第一个DF:

id_number    name    type    city
    1        John    dev     Toronto
    2        Alex    dev     Toronto
    3        Tyler   dev     Toronto
    4        David   dev     Toronto
    5        Chloe   dev     Toronto
第二个DF:

id_number    name    type    city
    1        John    boss    Vancouver
    2        Alex    dev     Vancouver
    4        David   boss    Toronto
    5        Chloe   dev     Toronto
    6        Kyle    dev     Vancouver
我希望生成的df包含以下记录:

id_number    name    type    city
    1        John    dev     Toronto
    1        John    boss    Vancouver
    2        Alex    dev     Toronto
    2        Alex    dev     Vancouver
    4        David   dev     Toronto
    4        David   Boss    Toronto
注意:我不希望id_编号为5的记录出现在结果df中,这是因为id_编号为5的记录在两个dfs中完全相同


事实上,每条记录有80列,但我认为这些表格让我的观点更清楚一些。再次总结一下,我希望结果df包含具有相同id_编号的记录,但在任何其他列中都有不同的值。提前感谢您的帮助

这里有一种使用
nunique
的方法,然后我们选择那些
id\u编号
多于
1
并将它们切掉

s = pd.concat([df1, df2])
s = s.loc[s.id_number.isin(s.groupby(['id_number']).nunique().gt(1).any(1).loc[lambda x : x].index)]
s
Out[654]: 
   id_number   name  type       city
0          1   John   dev    Toronto
1          2   Alex   dev    Toronto
3          4  David   dev    Toronto
0          1   John  boss  Vancouver
1          2   Alex   dev  Vancouver
2          4  David  boss    Toronto

下面是一种使用
pd.concat
drop\u duplicates
duplicated
的方法:

pd.concat([df1, df2]).drop_duplicates(keep=False).sort_values('id_number')\
  .loc[lambda x: x.id_number.duplicated(keep=False)]
输出:

   id_number   name  type       city
0          1   John   dev    Toronto
0          1   John  boss  Vancouver
1          2   Alex   dev    Toronto
1          2   Alex   dev  Vancouver
3          4  David   dev    Toronto
2          4  David  boss    Toronto