我有一个数据集
|category| cat a cat b cat a
我希望能够返回类似的东西(显示独特的值和频率)
category | freq | cat a 2 cat b 1
EdChum - Rei.. 346
使用groupby
和count
:
In [37]: df = pd.DataFrame({'a':list('abssbab')}) df.groupby('a').count() Out[37]: a a a 2 b 3 s 2 [3 rows x 1 columns]
请参阅在线文档:http://pandas.pydata.org/pandas-docs/stable/groupby.html
同样value_counts()
正如@DSM评论的那样,有许多方法可以让猫在这里
In [38]: df['a'].value_counts() Out[38]: b 3 a 2 s 2 dtype: int64
如果要将频率添加回原始数据帧,请使用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按预期分配,但是这一行:df.groupby('a').count()返回一个空数据帧.这个答案是否可能与熊猫0.18.1过时了?此外,您的列名"a"与您搜索"a"的值相同,这有点令人困惑.我会自己编辑,但由于代码对我不起作用,我不能确定我的编辑. (4认同)
Arran Cudbar.. 82
如果要应用于所有列,可以使用:
df.apply(pd.value_counts)
这将对每个列应用基于列的聚合函数(在本例中为value_counts).
df.category.value_counts()
这一小段代码将为您提供所需的输出.
如果您的列名称包含空格,则可以使用
df['category'].value_counts()
对df中的多个列使用list comprehension和value_counts
[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]
/sf/ask/17360801/
在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]
但是,使用size
以下方法可以轻松确定唯一值及其频率:
>>> df.groupby('a').size() a a 2 b 3 s 2
对于df.a.value_counts()
排序值(按降序排列,即最大值为第一个),默认返回.
如果您的DataFrame具有相同类型的值,则还可以return_counts=True
在numpy.unique()中进行设置。
index, counts = np.unique(df.values,return_counts=True)
如果您的值是整数,则np.bincount()可能会更快。
df.apply(pd.value_counts).fillna(0)
value_counts - 返回包含唯一值计数的对象
apply - 计算每列的频率.如果设置axis = 1,则每行都会获得频率
fillna(0) - 使输出更加花哨.将NaN更改为0
使用groupby
和count
:
In [37]: df = pd.DataFrame({'a':list('abssbab')}) df.groupby('a').count() Out[37]: a a a 2 b 3 s 2 [3 rows x 1 columns]
请参阅在线文档:http://pandas.pydata.org/pandas-docs/stable/groupby.html
同样value_counts()
正如@DSM评论的那样,有许多方法可以让猫在这里
In [38]: df['a'].value_counts() Out[38]: b 3 a 2 s 2 dtype: int64
如果要将频率添加回原始数据帧,请使用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.apply(pd.value_counts)
这将对每个列应用基于列的聚合函数(在本例中为value_counts).