Количество вхождений пары значений в фрейм данных - PullRequest
0 голосов
/ 12 мая 2018

У меня есть датафрейм со следующими столбцами:

Name, Surname, dateOfBirth, city, country

Мне интересно найти наиболее распространенную комбинацию имени и фамилии и ее количество.Было бы неплохо также увидеть список из 10 лучших комбинаций.

Моя идея для первой была:

mostFreqComb= df.groupby(['Name','Surname'])['Name'].count().argmax()

Но я думаю, что это не дает мне правильного ответа.Помощь будет высоко ценится!

Спасибо, Неб

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Похоже, хороший пример использования для исполнителя Counter:

from collections import Counter
popular_names = Counter(zip(df.Name, df.Surname)).most_common(10) 
0 голосов
/ 12 мая 2018

Сведения о производительности приведенных ниже решений см. В разделе Pandas groupby.size против series.value_counts vs collection.Counter с несколькими сериями . Сначала они представлены с лучшими характеристиками.

GroupBy.size

Вы можете создать серию отсчетов с помощью индексов кортежей (имя, фамилия), используя 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

value_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()

collections.Counter

Если вы хотите создать словарь из (name, surname): counts записей, вы можете сделать это с помощью collections.Counter:

from collections import Counter

zipper = zip(df.Name, df.Surname)
c = Counter(zipper)

Counter имеет полезные методы, такие как most_common, которые вы можете использовать для извлечения результата.

...