Сведения о производительности приведенных ниже решений см. В разделе Pandas groupby.size против series.value_counts vs collection.Counter с несколькими сериями . Сначала они представлены с лучшими характеристиками.
Вы можете создать серию отсчетов с помощью индексов кортежей (имя, фамилия), используя GroupBy.size
:
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
, которые вы можете использовать для извлечения результата.