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'],但它提供了keyErrordf['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_countsto_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的日期数据列生成日期索引