python - 具有已知变量水平的 count_values

标签 python pandas

我正在寻找一种计算数据透视表和频率计数的有效方法,但我的要求是,如果我知道变量的域,那么应该计算域中每个值的计数,而不仅仅是观察到的那些值在样本中。

例如使用下面的代码,Series.count_values 方法输出:

2    2
1    2

但我知道我的变量的域是 [0,1,2] 所以我真的想要:

0    0
1    2
2    2

下面是重现示例的代码示例

import pandas as pd
import numpy as np

s=pd.Series([1,2,2,1])

def my_value_counts(s,levels):
#levels is a numpy array
    c=s.value_counts()
    foundl=sorted(c.index)
    counts=np.zeros_like(levels)
    for i,l in enumerate(levels):
        if l in foundl:
            counts[i]=c.loc[l]
    return counts

print "Original method"
print s.value_counts()
print "with all levels"
print my_value_counts(s,np.arange(3))

我的问题是:我的代码效率低吗?似乎有点排序可能会有所帮助。如果是这样,有没有一种方法可以做到这一点,而不必像我在代码中那样重新创建频率表并将其值与 values_count 的输出匹配?

谢谢, 铝

最佳答案

一种方法是使用从 0 到最大值 + 1 的新索引重新索引 value_counts:

In [12]:
s=pd.Series([1,2,2,1])
val = s.value_counts()
val.reindex(np.arange(0, s.max()+1)).fillna(0)

Out[12]:
0    0
1    2
2    2
dtype: float64

关于python - 具有已知变量水平的 count_values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215870/

相关文章:

python - Django/Travis CI - 配置 .travis YAML 文件以首先启动本地主机服务器,然后在不挂起的情况下运行我的测试?

python - Pandas |合并具有相同 ID 的行

python - 如何防止Pandas出现 "None of [MultiIndex...] are in the [columns]"?

python - 将包含汉字的 Pandas 数据框保存到文件

python - 根据第一行的固定计数从 pandas 数据框中获取行

python - 艰巨的工作流程编写 Latex 书全是 Python 代码

python - 使用 GitPython 和 https 凭证克隆 AWS CodeCommit git 存储库

python - 在 Theano 中执行期间选择 GPU

python - Django 模型 - 字段依赖

python - 如何使用 python pandas 从数据框中删除重复的列