我有一个数据集

category
cat a
cat b
cat a

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

category   freq 
cat a       2
cat b       1

当前回答

df.category.value_counts()

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

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

df['category'].value_counts()

其他回答

在0.18.1中,groupby和count没有给出唯一值的频率:

>>> df
   a
0  a
1  b
2  s
3  s
4  b
5  a
6  b

>>> df.groupby('a').count()
Empty DataFrame
Columns: []
Index: [a, b, s]

然而,唯一的值和它们的频率很容易通过大小来确定:

>>> df.groupby('a').size()
a
a    2
b    3
s    2

使用df.a.value_counts(),默认情况下返回排序后的值(降序排列,即最大值在前)。

如果你想应用到所有列,你可以使用:

df.apply(pd.value_counts)

这将对每一列应用一个基于列的聚合函数(在本例中为value_counts)。

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

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列列表。

def column_list(x):
    column_list_df = []
    for col_name in x.columns:
        y = col_name, len(x[col_name].unique())
        column_list_df.append(y)
return pd.DataFrame(column_list_df)

column_list_df.rename(columns={0: "Feature", 1: "Value_count"})

函数“column_list”检查列名,然后检查每个列值的唯一性。

df.category.value_counts()

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

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

df['category'].value_counts()