我想对以下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/