在pandas DataFrame列中计算值的频率

78
我想统计数据框中每个值出现的次数。
这是我的数据框-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,但没有用。

我想知道为什么我不能直接使用df['status'].value_counts()[my_key],而必须先使用to_dict()呢? - Egret
5个回答

153
你可以使用 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}

1
很棒的解决方案 - 只使用了Pandas。 - Say OL
不错的解决方案。我可以将其视为普通字典,并以此方式使用 - counts [my_key]。 但是,我想知道为什么我不能直接使用df ['status'] .value_counts() [my_key],而必须先使用to_dict()? - Egret

14

使用Counter的另一种替代方法:

In [3]: from collections import Counter

In [4]: dict(Counter(df.status))
Out[4]: {'C': 2, 'N': 14, 'S': 4}

9
你可以尝试这种方式。
df.stack().value_counts().to_dict()

1
为什么我们要使用堆栈? - Say OL

2

你能将 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)}

1

在这个帖子中,您可以查看我的回复,以获取Pandas DataFrame输出。

计算数据框列中值出现的频率,您可以按以下方式进行修改以获得字典输出:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接