有关以下解决方案的性能影响,请参阅Pandas groupby.size vs series.value_counts vs collections.Counter with multiple series。它们在下面以最佳性能优先显示。
您可以使用 GroupBy.size 使用 (Name, Surname) 元组索引创建一系列计数:
res = df.groupby(['Name', 'Surname']).size().sort_values(ascending=False)
通过对这些值进行排序,我们可以轻松提取出最常见的:
most_common = res.head(1)
most_common_dups = res[res == res.iloc[0]].index.tolist() # handles duplicate top counts
另一种方法是构造一系列元组,然后申请pd.Series.value_counts:
res = pd.Series(list(zip(df.Name, df.Surname))).value_counts()
结果将是一系列按姓名-姓氏组合索引的计数,从最常见到最少排序。
name, surname = res.index[0] # return most common
most_common_dups = res[res == res.max()].index.tolist()
如果您希望创建包含(name, surname): counts 条目的字典,可以通过collections.Counter 进行:
from collections import Counter
zipper = zip(df.Name, df.Surname)
c = Counter(zipper)
Counter 具有有用的方法,例如 most_common,您可以使用它们来提取结果。