我有一个数据集
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
当前回答
下面的代码为名为“smaller_dat1”的数据帧中的“Total_score”列中的各种值创建频率表,然后返回值“300”在该列中出现的次数。
valuec = smaller_dat1.Total_score.value_counts()
valuec.loc[300]
其他回答
使用value_counts()作为@DSM注释。
In [37]:
df = pd.DataFrame({'a':list('abssbab')})
df['a'].value_counts()
Out[37]:
b 3
a 2
s 2
dtype: int64
还有groupby和count。在这里有很多方法可以剥猫皮。
In [38]:
df.groupby('a').count()
Out[38]:
a
a
a 2
b 3
s 2
[3 rows x 1 columns]
查看在线文档。
如果你想将频率添加回原始数据帧,使用transform返回一个对齐的索引:
In [41]:
df['freq'] = df.groupby('a')['a'].transform('count')
df
Out[41]:
a freq
0 a 2
1 b 3
2 s 2
3 s 2
4 b 3
5 a 2
6 b 3
[7 rows x 2 columns]
对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
@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
干杯!
在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).fillna(0)
value_counts -返回包含唯一值计数的对象
在每一列中应用计数频率。如果你设置axis=1,你会得到每一行的频率
Fillna(0) -使输出更花哨。更改NaN为0