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