数据框中值对的出现次数

Posted

技术标签:

【中文标题】数据框中值对的出现次数【英文标题】:Number of occurrence of pair of value in dataframe 【发布时间】:2018-10-22 22:16:00 【问题描述】:

我有以下列的数据框:

Name, Surname, dateOfBirth, city, country

我很想知道什么是最常见的名字和姓氏组合以及它出现的次数。 也很高兴看到前 10 种组合的列表。

我对第一名的想法是:

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

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

谢谢, 奈布

【问题讨论】:

性能说明,包括替代方案:Pandas groupby.size vs series.value_counts vs collections.Counter with multiple series 【参考方案1】:

有关以下解决方案的性能影响,请参阅Pandas groupby.size vs series.value_counts vs collections.Counter with multiple series。它们在下面以最佳性能优先显示。

GroupBy.size

您可以使用 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

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,您可以使用它们来提取结果。

【讨论】:

嗯,好像你在那儿忍者编辑了我。好吧,我建议将 Counter 放在顶部,这是迄今为止您答案中最好的部分。 @cᴏʟᴅsᴘᴇᴇᴅ,我不同意..所有的意见问题:)。例如,与pandas 系列索引相比,从Counter 获取重复最高计数的语法很麻烦[理解]。如果性能不是问题,我推荐value_counts 我不确定我是否遵循。似乎 OP 只想要这里最常见的 10 个值。为什么有重复计数很重要?顺便说一句,我会注意到您目前没有任何选项可以满足 OP 的要求。 @cᴏʟᴅsᴘᴇᴇᴅ,如果重复第 10 次计数怎么办?那么第 10 个最受欢迎的计数是 100,并且有 3 个姓氏组合与 100 计数?带有系列索引的nlargest 在语法上比理解更清晰。 Look here 恕我直言丑陋的替代品Counter 我明白你所说的可能对某些用户很重要,但我怀疑这是否是这个 OP 中“我想要前 10 名”的意义所在。真的,我明白你的意思,Counter 真的应该有不止一个功能,让我们与他们的 API 进行更清洁的交互。【参考方案2】:

对于高性能 Counter 来说似乎是一个很好的用例:

from collections import Counter
popular_names = Counter(zip(df.Name, df.Surname)).most_common(10) 

【讨论】:

以上是关于数据框中值对的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

对于每行,字段中值的出现次数

查找表中值的最大连续出现次数

计算R(每行)中一组变量中值的出现次数 - 使用权重

统计表中值的连续出现次数

使用 Redshift 计算特定 ID 字段中值的出现次数

javascript 计算数组中值的出现次数#array