我有一个数据集

category
cat a
cat b
cat a

我希望能够返回(显示唯一值和频率)

category   freq 
cat a       2
cat b       1

当前回答

df.apply(pd.value_counts).fillna(0)

value_counts -返回包含唯一值计数的对象

在每一列中应用计数频率。如果你设置axis=1,你会得到每一行的频率

Fillna(0) -使输出更花哨。更改NaN为0

其他回答

正如大家所说,更快的解决方法是:

df.column_to_analyze.value_counts()

但是如果你想在你的数据框架中使用输出,使用这个模式:

df input:

category
cat a
cat b
cat a

df output: 

category   counts
cat a        2
cat b        1 
cat a        2

你可以这样做:

df['counts'] = df.category.map(df.category.value_counts())
df 

如果没有任何库,你可以这样做:

def to_frequency_table(data):
    frequencytable = {}
    for key in data:
        if key in frequencytable:
            frequencytable[key] += 1
        else:
            frequencytable[key] = 1
    return frequencytable

例子:

to_frequency_table([1,1,1,1,2,3,4,4])
>>> {1: 4, 2: 1, 3: 1, 4: 2}

如果你的DataFrame有相同类型的值,你也可以在numpy.unique()中设置return_counts=True。

index, counts= np.unique(df.values,return_counts=True)

如果您的值是整数,则Np.bincount()可能更快。

df.category.value_counts()

这一小行代码将提供您想要的输出。

如果列名中有空格,则可以使用

df['category'].value_counts()
df.apply(pd.value_counts).fillna(0)

value_counts -返回包含唯一值计数的对象

在每一列中应用计数频率。如果你设置axis=1,你会得到每一行的频率

Fillna(0) -使输出更花哨。更改NaN为0