更快速地添加有序频率的熊猫系列

时间:2018-05-19 20:27:41

标签: python pandas

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

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

这应该产生[3,4,5,1,1],因为组ID 1出现3次,组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"

1 个答案:

答案 0 :(得分:1)

给出一个系列

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项目重新排序。