python - 如何计算一个值的出现次数,直到它变为另一个值?

标签 python pandas dataframe

我有一个名为 df 的 pandas 数据框。在此数据框中,我得到了一个名为 value 的变量。我想添加一个变量来计算相同值的出现次数,直到它更改为另一个值。我们将这个新变量称为 count

我的数据框看起来像这样:

import pandas as pd
import numpy as np

ar = np.array([[1], [1], [2],[2], [3], [3], [1], [1], [2], [2]])
df = pd.DataFrame(ar,  columns = ['Value'])

print(df)

   Value
0      1
1      1
2      2
3      2
4      3
5      3
6      1
7      1
8      2
9      2

我尝试了这段代码:

df['count'] = df.groupby('Value').cumcount() + 1

返回结果:

print(df)
   Value  count
0      1      1
1      1      2
2      2      1
3      2      2
4      3      1
5      3      2
6      1      3
7      1      4
8      2      3
9      2      4

我期望这样的事情:

print(df)
   Value  count
0      1      1
1      1      2
2      2      1
3      2      2
4      3      1
5      3      2
6      1      1
7      1      2
8      2      1
9      2      2

有没有办法获得该输出?

最佳答案

IIUC,使用:

df=df.assign(count=df.groupby(df.Value.ne(df.Value.shift()).cumsum()).cumcount().add(1))
<小时/>
   Value  count
0      1      1
1      1      2
2      2      1
3      2      2
4      3      1
5      3      2
6      1      1
7      1      2
8      2      1
9      2      2

地点:

print(df.Value.ne(df.Value.shift()))
<小时/>
0     True
1    False
2     True
3    False
4     True
5    False
6     True
7    False
8     True
9    False
Name: Value, dtype: bool

关于python - 如何计算一个值的出现次数,直到它变为另一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56662092/

相关文章:

Python - Pandas 数据框 - 生成包含组级信息的列

python - 如何退出异常循环,但不重新引发每种异常类型?

python - 不支持的操作数类型 - : 'int' and 'list'

python - 忽略 0 的行的 Pandas 平均值

python - Pandas 到 Sql Server 的速度 - python 批量插入?

python - 将 pandas 中的字典拆分为单独的列

使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

python - 在 Python 中使用 webbrowser 显示临时 html 文件

pandas - 在 Pandas 数据框中查找具有相同值的不同 ID

python - 反转数据框中的行值