Если каждая строка выглядит как Name Activity
и других столбцов нет, то на самом деле вам нужно отфильтровать имена на основе того, включены ли они в какие-либо повторяющиеся строки. Один из способов сделать это:
df = pd.DataFrame([["John", "Cleaning"],
["John", "Cleaning"],
["Mary", "Driving"],
["Mary", "Cleaning"],
["Mary", "Walking"],
["John", "Driving"],
["Peter", "Cleaning"],
["John", "Driving"],
["John", "Cleaning"],
["John", "Walking"]],
columns=["Name", "Activity"])
result = df[
df['Name'].isin(df[df.duplicated()]['Name'])
].groupby('Name')['Activity'].value_counts()
print(result)
Если у вас есть другие столбцы, которые вы здесь просто не показываете, вы можете использовать duplicated(subset=["Name", "Activity"])
.
Вывод:
Name Activity
John Cleaning 3
Driving 2
Walking 1
РЕДАКТИРОВАТЬ
Если все, что вам нужно, это имена и ни одно из действий, вы можете использовать
df[df.duplicated()]['Name'].unique()