提问者:小点点

数据帧中值对的出现次数


我有以下列的数据框:

Name, Surname, dateOfBirth, city, country

我很想知道什么是最常见的名字和姓氏的组合,以及它发生了多少。如果能看到前10种组合的列表,那就太好了。

我对第一名的想法是:

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

但我认为它没有给我正确的答案。帮助将不胜感激!

谢了,奈伯


共2个答案

匿名用户

有关以下解决方案的性能影响,请参阅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)