数据帧中值对的出现次数

Neb*_*der 7 python series pandas

我有以下列的数据框:

Name, Surname, dateOfBirth, city, country
Run Code Online (Sandbox Code Playgroud)

我有兴趣找到名称和姓氏最常见的组合以及它的发生程度.很高兴能看到十大组合的列表.

我最重要的想法是:

mostFreqComb= df.groupby(['Name','Surname'])['Name'].count().argmax()
Run Code Online (Sandbox Code Playgroud)

但我认为它没有给我正确答案.非常感谢帮助!

谢谢,纳布

jpp*_*jpp 7

有关以下解决方案的性能影响,请参阅Pandas groupby.size与series.value_counts vs collections.Counter有多个系列.它们首先以最佳性能呈现在下面.

GroupBy.size

您可以使用以下命令创建一系列带有(Name,Surname)元组索引的计数GroupBy.size:

res = df.groupby(['Name', 'Surname']).size().sort_values(ascending=False)
Run Code Online (Sandbox Code Playgroud)

通过对这些值进行排序,我们可以轻松地提取最常见的值:

most_common = res.head(1)
most_common_dups = res[res == res.iloc[0]].index.tolist()  # handles duplicate top counts
Run Code Online (Sandbox Code Playgroud)

value_counts

另一种方法是构造一系列元组,然后应用pd.Series.value_counts:

res = pd.Series(list(zip(df.Name, df.Surname))).value_counts()
Run Code Online (Sandbox Code Playgroud)

结果将是由Name-Surname组合索引的一系列计数,从最常见到最少排序.

name, surname = res.index[0]  # return most common
most_common_dups = res[res == res.max()].index.tolist()
Run Code Online (Sandbox Code Playgroud)

collections.Counter

如果您希望创建(name, surname): counts条目词典,可以通过以下方式完成collections.Counter:

from collections import Counter

zipper = zip(df.Name, df.Surname)
c = Counter(zipper)
Run Code Online (Sandbox Code Playgroud)

Counter有一些有用的方法most_common,您可以使用它们来提取结果.