Я везде ищу этот ответ, но, похоже, никто не делает то, что мне нужно. Вот фиктивный пример того, что мне нужно:
data = {'id':[1, 2, 3, 4, 1, 1, 3, 4, 1],
'parent':['a', 'b', 'f', 'j', 'a', 'n', 'f', 'z', 'x'],
'vehicle':['car', 'car', 'truck', 'suv', 'car', 'hatch', 'truck', 'suv', 'car'],
'color':['red', 'blue', 'grey', 'green', 'red', 'purple', 'grey', 'green', 'red'],
'serial': [324234, 23464, 5667, 1245, 786, 34546, 8537, 111111, 8376251537]}
df = pd.DataFrame(data)
df.sort_values(by=['id', 'parent'], inplace=True)
id parent vehicle color serial
0 1 a car red 324234
4 1 a car red 786
5 1 n hatch purple 34546
8 1 x car red 8376251537
1 2 b car blue 23464
2 3 f truck grey 5667
6 3 f truck grey 8537
3 4 j suv green 1245
7 4 z suv green 111111
И что мне нужно, так это получить все строки с одинаковым идентификатором , но родительский элемент отличается , а цвет и транспортное средство совпадают.
Итак, я хочу:
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
Обратите внимание, что я хочу включить две верхние из вышеперечисленного, потому что они имеют другой серийный номер.
Редактировать: , и они являются частью группы, которая имеет различного родителя с одинаковым идентификатором.
Я попробовал это и приблизился:
target = df[df.duplicated(['id', 'vehicle', 'color'], keep=False)]
id parent vehicle color serial
0 1 a car red 324234
4 1 a car red 786
8 1 x car red 8376251537
2 3 f truck grey 5667
6 3 f truck grey 8537
3 4 j suv green 1245
7 4 z suv green 111111
Но я не хочу, чтобы строки с одинаковым идентификатором, транспортным средством, цветом i f соответствовали родительскому элементу . Так что в этом случае я не хочу
id parent vehicle color serial
2 3 f truck grey 5667
6 3 f truck grey 8537
потому что у них один и тот же родитель.
Я думал о группировке и изменении индекса, но то, что я делаю, не работает. Это кажется легкой проблемой, и, возможно, это так, но я просто не могу ее взломать!