我有一个数据集
category
cat a
cat b
cat a
我希望能够返回(显示唯一值和频率)
category freq
cat a 2
cat b 1
我有一个数据集
category
cat a
cat b
cat a
我希望能够返回(显示唯一值和频率)
category freq
cat a 2
cat b 1
当前回答
如果你的DataFrame有相同类型的值,你也可以在numpy.unique()中设置return_counts=True。
index, counts= np.unique(df.values,return_counts=True)
如果您的值是整数,则Np.bincount()可能更快。
其他回答
@metatoaster已经指出了这一点。 去柜台。它的速度非常快。
import pandas as pd
from collections import Counter
import timeit
import numpy as np
df = pd.DataFrame(np.random.randint(1, 10000, (100, 2)), columns=["NumA", "NumB"])
计时器
%timeit -n 10000 df['NumA'].value_counts()
# 10000 loops, best of 3: 715 µs per loop
%timeit -n 10000 df['NumA'].value_counts().to_dict()
# 10000 loops, best of 3: 796 µs per loop
%timeit -n 10000 Counter(df['NumA'])
# 10000 loops, best of 3: 74 µs per loop
%timeit -n 10000 df.groupby(['NumA']).count()
# 10000 loops, best of 3: 1.29 ms per loop
干杯!
如果没有任何库,你可以这样做:
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}
df.apply(pd.value_counts).fillna(0)
value_counts -返回包含唯一值计数的对象
在每一列中应用计数频率。如果你设置axis=1,你会得到每一行的频率
Fillna(0) -使输出更花哨。更改NaN为0
对df中的多个列使用列表理解和value_counts
[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]
https://stackoverflow.com/a/28192263/786326
your data:
|category|
cat a
cat b
cat a
解决方案:
df['freq'] = df.groupby('category')['category'].transform('count')
df = df.drop_duplicates()