我有一个数据集
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
当前回答
如果你想应用到所有列,你可以使用:
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}
n_values = data.income.value_counts()
第一个唯一值计数
n_at_most_50k = n_values[0]
第二个唯一值计数
n_greater_50k = n_values[1]
n_values
输出:
<=50K 34014
>50K 11208
Name: income, dtype: int64
输出:
n_greater_50k,n_at_most_50k:-
(11208, 34014)
your data:
|category|
cat a
cat b
cat a
解决方案:
df['freq'] = df.groupby('category')['category'].transform('count')
df = df.drop_duplicates()
使用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.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