我有以下列的数据框:
Name, Surname, dateOfBirth, city, country
我很想知道什么是最常见的名字和姓氏的组合,以及它发生了多少。如果能看到前10种组合的列表,那就太好了。
我对第一名的想法是:
mostFreqComb= df.groupby(['Name','Surname'])['Name'].count().argmax()
但我认为它没有给我正确的答案。帮助将不胜感激!
谢了,奈伯
有关以下解决方案的性能影响,请参阅Pandas grouppby. size vs系列。value_countsvs集合。具有多个系列的计数器。它们首先以最佳性能呈现在下面。
您可以使用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)的字典:计数
条目,你可以通过集合。计数器
:
from collections import Counter
zipper = zip(df.Name, df.Surname)
c = Counter(zipper)
计数器
具有有用的方法,例如most_common
,您可以使用它们来提取结果。
似乎是高性能计数器
的一个很好的用例:
from collections import Counter
popular_names = Counter(zip(df.Name, df.Surname)).most_common(10)