我想对以下df执行当前Val的周期计数:

ID  Day Val
111 7   x
111 6   x
111 5   y
111 4   y
111 3   x
111 2   x
111 1   x
222 6   x
222 5   x
222 4   x
222 3   x
222 2   y
222 1   y
333 3   z
333 2   z
333 1   z
444 2   y
444 1   y
555 3   z
555 2   y
555 1   x


结果将是:

ID  Day Val freq
111 6   x   2
111 4   y   2
111 1   x   3
222 3   x   4
222 1   y   2
333 1   z   3
444 1   y   2
555 3   z   1
555 2   y   1
555 1   x   1


我试过了:
df.groupby([[ID','Value'])。size()。reset_index(name ='freq'),但这没有得到我想要的结果。我不确定如何将它们分组以获得期望的结果。

非常感谢! :)

最佳答案

这是一种方式。

from itertools import groupby, accumulate

lst = [sum(1 for _ in group) for _, group in groupby(zip(df.ID, df.Val))]
cumsum = [i-1 for i in accumulate(lst)]

df.iloc[cumsum].assign(freq=lst)

#      ID  Day Val  freq
# 1   111    6   x     2
# 3   111    4   y     2
# 6   111    1   x     3
# 10  222    3   x     4
# 12  222    1   y     2
# 15  333    1   z     3
# 17  444    1   y     2
# 18  555    3   z     1
# 19  555    2   y     1
# 20  555    1   x     1

关于python - Pandas 计数周期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48777921/

10-12 20:59