Python 基于数据帧中的条件分组查找匹配行

Python 基于数据帧中的条件分组查找匹配行,python,pandas,dataframe,duplicates,matching,Python,Pandas,Dataframe,Duplicates,Matching,我到处寻找这个答案,但似乎没有一个能满足我的需要。以下是我需要的一个虚拟示例: data={'id':[1,2,3,4,1,1,3,4,1], ‘父项’:[‘a’、‘b’、‘f’、‘j’、‘a’、‘n’、‘f’、‘z’、‘x’], ‘车辆’:[‘汽车’、‘汽车’、‘卡车’、‘suv’、‘汽车’、‘舱口’、‘卡车’、‘suv’、‘汽车’], “颜色”:[“红色”、“蓝色”、“灰色”、“绿色”、“红色”、“紫色”、“灰色”、“绿色”、“红色”], “序列号”:[3242346456671245786

我到处寻找这个答案,但似乎没有一个能满足我的需要。以下是我需要的一个虚拟示例:

data={'id':[1,2,3,4,1,1,3,4,1],
‘父项’:[‘a’、‘b’、‘f’、‘j’、‘a’、‘n’、‘f’、‘z’、‘x’],
‘车辆’:[‘汽车’、‘汽车’、‘卡车’、‘suv’、‘汽车’、‘舱口’、‘卡车’、‘suv’、‘汽车’],
“颜色”:[“红色”、“蓝色”、“灰色”、“绿色”、“红色”、“紫色”、“灰色”、“绿色”、“红色”],
“序列号”:[32423464566712457863454685371111118376251537]}
df=pd.DataFrame(数据)
排序_值(按=['id','parent'],inplace=True)
id父车辆颜色序列
0 1 a车红色324234
4.一辆红色786轿车
51N舱口紫色34546
8 1 x车红色8376251537
12B车蓝23464
2 3 f卡车灰色5667
6 3 f卡车灰色8537
3 4 j suv绿色1245
7 4 z suv绿色111111
我需要的是获取所有行,其中id相同,但父项不同,并且车辆和颜色相同


所以我想:

id父车辆颜色序列
0 1 a车红色324234
4.一辆红色786轿车
8 1 x车红色8376251537
3 4 j suv绿色1245
7 4 z suv绿色111111
注意,我想包括上面的前两个,因为它们有不同的序列号。 编辑:并且它们是具有相同id的不同父组的一部分


我已经试过了,并且接近了:

target=df[df.重复(['id','vehicle','color',keep=False)]
id父车辆颜色序列
0 1 a车红色324234
4.一辆红色786轿车
8 1 x车红色8376251537
2 3 f卡车灰色5667
6 3 f卡车灰色8537
3 4 j suv绿色1245
7 4 z suv绿色111111
但是我不希望具有匹配id、车辆、颜色I的行,因为相应的父级也是相同的。所以在这种情况下,我不想

id父车辆颜色序列
2 3 f卡车灰色5667
6 3 f卡车灰色8537
因为他们有相同的父母。 我曾考虑过分组和更改索引,但我现在做的不起作用。这似乎是一个容易的问题,也许是,但我只是不能破解它

IIUC,让我们试试这个:

df[df.groupby(['id','vehicle','color'])['parent'].transform('nunique') > 1]
输出:

   id parent vehicle  color      serial
0   1      a     car    red      324234
4   1      a     car    red         786
8   1      x     car    red  8376251537
3   4      j     suv  green        1245
7   4      z     suv  green      111111

第0行和第4行呢,它们有相同的父项和id,为什么要保留它们?输出中是否缺少行
1 x car
?@anky_91因为第一:它们是不同父母的匹配组的一部分,第二:它们有不同的序列号。@cs95您可以指定您认为缺少的行吗?我可以发誓我对此进行了评论,但这是有效的完美地非常感谢斯科特!