pandas DataFrame 列中值的计数频率
Posted
技术标签:
【中文标题】pandas DataFrame 列中值的计数频率【英文标题】:Count frequency of values in pandas DataFrame column 【发布时间】:2016-06-30 12:29:45 【问题描述】:我想计算每个值在数据框中出现的次数。
这是我的数据框 - df
:
status
1 N
2 N
3 C
4 N
5 S
6 N
7 N
8 S
9 N
10 N
11 N
12 S
13 N
14 C
15 N
16 N
17 N
18 N
19 S
20 N
我想要计数字典:
例如。 counts = N: 14, C:2, S:4
我尝试过df['status']['N']
,但它提供了keyError
和df['status'].value_counts
,但没有用。
【问题讨论】:
【参考方案1】:你能把df
转换成一个列表吗?
如果是这样:
a = ['a', 'a', 'a', 'b', 'b', 'c']
c = dict()
for i in set(a):
c[i] = a.count(i)
使用字典理解:
c = i: a.count(i) for i in set(a)
【讨论】:
【参考方案2】:您可以使用value_counts
和to_dict
:
print df['status'].value_counts()
N 14
S 4
C 2
Name: status, dtype: int64
counts = df['status'].value_counts().to_dict()
print counts
'S': 4, 'C': 2, 'N': 14
【讨论】:
不错的解决方案 - 仅使用 pandas【参考方案3】:另一种使用失败者Counter
的班轮:
In [3]: from collections import Counter
In [4]: dict(Counter(df.status))
Out[4]: 'C': 2, 'N': 14, 'S': 4
【讨论】:
【参考方案4】:你可以试试这个方法。
df.stack().value_counts().to_dict()
【讨论】:
我们为什么要堆叠?【参考方案5】:查看我在此线程中对 Pandas DataFrame 输出的回复,
count the frequency that a value occurs in a dataframe column
对于字典输出,可以修改如下:
def column_list_dict(x):
column_list_df = []
for col_name in x.columns:
y = col_name, len(x[col_name].unique())
column_list_df.append(y)
return dict(column_list_df)
【讨论】:
以上是关于pandas DataFrame 列中值的计数频率的主要内容,如果未能解决你的问题,请参考以下文章
如何删除某一列中值为 NaN 的 Pandas DataFrame 行
如何删除某一列中值为 NaN 的 Pandas DataFrame 行
如何删除某一列中值为 NaN 的 Pandas DataFrame 行
如何删除某一列中值为 NaN 的 Pandas DataFrame 行
Pandas DataFrame groupby,跨列计数和求和
pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列基于dataframe的日期数据列生成日期索引