Я хочу получить список индексов всех строк, которые имеют одинаковые «Имя» и «Город», но разный возраст
Я думаю, что это немного неоднозначно, потому чтоесли в группе «Город имени» есть комбинация записей одного возраста и нескольких разных?В зависимости от желаемого выхода groupby
+ transform
+ nunique
для фильтрации может потребоваться.
Пример данных:
Обратите внимание, здесь добавлен регистр ребер, где John Boston 23
дублируется:
import pandas as pd
df = pd.DataFrame({'Name':['John','Peter','John','John','Donald', 'John'],
'City':['Boston','Japan','Boston','Dallas','Japan', 'Boston'],
'Age':[23,31,21,21,22, 23]})
# Name City Age
#0 John Boston 23
#1 Peter Japan 31
#2 John Boston 21
#3 John Dallas 21
#4 Donald Japan 22
#5 John Boston 23
Код:
df[df.groupby(['Name', 'City']).Age.transform(pd.Series.nunique).gt(1)]
# Name City Age
#0 John Boston 23
#2 John Boston 21
#5 John Boston 23
При других решениях точное дублирование может привести к нежелательному выводу:
df[df.duplicated(['Name','City'],keep=False)&~df.duplicated(keep=False)]
# Name City Age
#2 John Boston 21