我正在尝试列出 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/