Python:计算 python 数据框中每个数字的出现次数

Python: Count occurrences of each number in a python data-frame

我有一个用于项目集挖掘的数据集。我想找到每个唯一数字的出现,即候选 1 项集。

数据的形状是 3000x1。我不知道如何计算唯一出现次数。

存储数据的不同值列表。

使用 ndarray distinct,如何找到数据集中每个项目的频率?

更新 在@jojo 的帮助下得到了解决方案。

df = pd.read_csv('sample.csv', sep=',')
all_values = dataset.values.ravel()
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)

首先请注意,如果您有一个普通的 csv(逗号分隔),您应该使用 sep=','。这是因为 '\t' 假定 TAB 为分隔符。

此外,请考虑在您的 read_csv 调用中添加 header=None,否则第一行将作为数据框中的列名。

最后,由于该列的长度似乎不同,因此所有列中的 nan 值都比最长的列短,要删除它们,您可以在以下情况下屏蔽所有 nan 值获得独特的价值。类似于 values[np.logical_not(np.isnan(values))],但见下文。


把事情放在一起:

dataset = pd.read_csv('dataset.csv', sep=',', header=None)

all_values = dataset.values.ravel()

您可以直接使用 unique from numpy 来获取每个唯一值的计数:

import numpy as np
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)

如果您关心频率,只需将 counts 除以 all_values[notNan].size


这里有一个简单的例子(来自上面链接的文档)来强调 np.unique 是如何工作的:

>>> import numpy as np
>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> values, counts = np.unique(a, return_counts=True)
>>> values  # list of all unique values in a
array([1, 2, 3, 4, 6])
>>> counts  # count of the occurrences of each value in values
array([1, 3, 1, 1, 1])