标识列中最频繁出现的值(字符串)

时间:2019-02-22 02:03:43

标签: python pandas group-by pandas-groupby data-science

我有一个非常大的数据集(10 GB),格式为csv,具有不同的列和行。列之一是某类个人的ID(表示为字符串)。这些ID都已在数据中进行了加密,每个单独的ID可能会出现多次。我想找到数据中最常出现的个人的ID。理想情况下,我想计算每个ID在数据集中出现多少次。最终,我还想对各个ID进行统计分析。什么是最快的方法来做到这一点。我确实尝试过groupby,但不知道如何找到与组相对应的ID及其大小。

import pandas as pd
df = pd.read_csv('file')
user_groups = df.groupby(['IDs'])

4 个答案:

答案 0 :(得分:2)

您可以使用value_counts个熊猫。

  

value_counts :返回包含唯一值计数的对象。生成的对象将按降序排列,以便第一个元素是最频繁出现的元素。默认情况下不包括NA值。

df.ID.value_counts()

也可以像您在问题上所说的那样使用分组方式,更好:当您尝试对频率进行简单计数时:

df.groupby(['ID'], sort=True).size()

有可能看到每种方法的计算成本,并解释了为什么在this answer上禁忌一种方法。但是答案的 TLDR

m       grouper   counter
10      62.9 ms    315 ms
10**3    191 ms    535 ms
10**7    514 ms    459 ms

This video显示了如何在熊猫内部进行某些操作,因此,如果您想了解哪种方法使用更多的内存或进行更多的操作,则很有用。

答案 1 :(得分:1)

Widget

答案 2 :(得分:0)

我不确定这是否是您要寻找的答案,但是如果是我,我会考虑从ID中编写一个元组字典,例如{'ID Number':'Count',' 1234ABC':0,...]

然后,我将使用readlines()读取大型数据集的每一行,并且如果该行的数据中出现任何ID,则会更新元组列表中的计数。

完成读取数据集的所有行后,找到  “计数”并返回其关联的ID号。

您甚至可以在列表上进行排序,以将ID编号从出现次数最多到发生的次数排序到最少。

答案 3 :(得分:0)

如果您只是想找到模式,请在这里Most frequent value中回答

如果您想按组细分,请尝试以下操作:

df_2= df.groupby('Ids').count().reset_index()
df_2 = df_2.sort_values('replicate',ascending = False)

您可以将重命名之一添加到“频率”:

df_2 = df_2.rename(columns = {'Column Name':'new name'})