我有一个数据集
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)。
其他回答
你也可以用pandas先把你的列作为类别广播,例如dtype="category"。
cats = ['client', 'hotel', 'currency', 'ota', 'user_country']
df[cats] = df[cats].astype('category')
然后调用describe:
df[cats].describe()
这将给你一个很好的值计数表和更多的东西:):
client hotel currency ota user_country
count 852845 852845 852845 852845 852845
unique 2554 17477 132 14 219
top 2198 13202 USD Hades US
freq 102562 8847 516500 242734 340992
下面的代码为名为“smaller_dat1”的数据帧中的“Total_score”列中的各种值创建频率表,然后返回值“300”在该列中出现的次数。
valuec = smaller_dat1.Total_score.value_counts()
valuec.loc[300]
df.apply(pd.value_counts).fillna(0)
value_counts -返回包含唯一值计数的对象
在每一列中应用计数频率。如果你设置axis=1,你会得到每一行的频率
Fillna(0) -使输出更花哨。更改NaN为0
your data:
|category|
cat a
cat b
cat a
解决方案:
df['freq'] = df.groupby('category')['category'].transform('count')
df = df.drop_duplicates()
对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