python - 更快地附加 Pandas 系列的有序频率

标签 python pandas

我正在尝试列出 pandas 系列中每个组中的元素数量。在我的数据框中,我有一个名为 ID 的列,所有值都出现了多次。我想制作一个列表,其中包含每个元素出现的频率。

所以列 ID 的示例是 [1,2,3,3,3,2,1,5,2,3,1,2,4,3]

这应该产生 [3,4,5,1,1] 因为 group-ID 1 出现了 3 次,group-ID 2 出现了 4 次等等。我编写了一个代码完美地做到这一点:

group_list = df.ID.unique().tolist()
group_size = []

for i in group_list:
    group_size.append(df.ID.value_counts()[i])

问题是它需要很长时间才能完成。我有 500 万行,我让它运行了 50 分钟,但它仍然没有完成!我尝试在前 30-50 行运行它,它按预期工作。

对我来说,简单地使用 value_counts(sort=False) 是合乎逻辑的,但它不会按照它们在我的系列中出现的顺序给我组 ID 频率。我还尝试实现扩展,因为我读到它应该更快,但我得到一个 "numpy.int64 object is not iterable"

最佳答案

给定一个系列

ser = pd.Series([1,2,3,3,3,2,1,5,2,3,1,2,4,3])

您可以执行以下操作:

ser.value_counts().reindex(ser.unique()).tolist()
Out: [3, 4, 5, 1, 1]

Reindex 将根据它们出现的顺序对 value_counts 个项目重新排序。

关于python - 更快地附加 Pandas 系列的有序频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50429208/

相关文章:

python - 如何从具有动态列的数据框中获取值

python - 更改日历的 django 管理模板

python - numpy fromfile 和结构化数组

python - 使用来自 Python 的时间戳更新 Googlesheet 单元格

Python - pandas - 找到与平局解析最常见的组合 - 性能

python - 从两个数据帧计算一个新的 pandas DataFrame

用于通过比较两列创建新数据框的 Python/Pandas 语法

python - 阈值必须是数字且非NAN,打印numpy数组时,为什么numpy.nan在python3中未定义

python-2.7 - Pandas / python : split column based on a dictionary

python - Pandas 数据透视表到堆积条形图