groupby pandas 数据框中的连续相同值和出现次数的累积计数
groupby consecutive identical values in pandas dataframe and cumulative count of the number of occurences
我有一个问题,我想计算滚动期间数据帧中当前值未更改的次数。
例如:
df = pd.DataFrame({'col':list('aaaabbab')})
会以某种方式给出
的输出0
1
2
3
0
1
0
0
我一直在尝试以下内容
df['col'] = df['col'] == df['col'].shift(1)
df.rolling(window=3).sum().reset_index(drop=True, level=0)
我添加了滚动,因为我想查看滚动周期方面的完整数据集,但即使没有滚动周期,我也无法完全理解其中的逻辑。
我不确定我是否遗漏了一些简单的东西,或者这可能无法使用 shift
您需要为值的变化生成石斑鱼。为此,将每个值与前一个值进行比较并应用 cumsum
。这为您提供 itertools.groupby
样式的组([1, 1, 1, 1, 2, 2, 3, 4]),最后分组并应用 cumcount
.
df['count'] = (df.groupby(df['col'].ne(df['col'].shift()).cumsum())
.cumcount()
)
输出:
col count
0 a 0
1 a 1
2 a 2
3 a 3
4 b 0
5 b 1
6 a 0
7 b 0
编辑:为了好玩,这里有一个使用 itertools 的解决方案(快得多):
from itertools import groupby, chain
df['count'] = list(chain(*(list(range(len(list(g))))
for _,g in groupby(df['col']))))
注意。这运行得更快(在提供的示例中为 88 µs 与 707 µs)