python - Pandas :计算有条件的连续行

标签 python excel pandas dataframe

我有一张这样的 table :

name = ['a','a','a','a','a','b','b','b','b']
fillrate = [0.1, 0.1, 0.2, 0.1, 0.1, 0.3, 0.3, 0.3, 0.4]
df = pd.DataFrame(name)
df.columns = ['name']
df['fillrate'] = fillrate

我想创建一个这样的列:
df['count'] = [1,2,1,2,3,1,2,3,1]

说明:当有新名称或填充率增加时,“计数”列重置为 1;否则,“count”列等于最后一个值加 1。

使用循环很容易做到这一点,但我想避免这种情况,因为数据很大。有没有其他方法可以做到这一点?

最佳答案

IIUC让我们结合shiftdiff并使用 cumsum创建子组 cumcount

s=(df.name.ne(df.name.shift()) | df.fillrate.diff().gt(0)).cumsum()
s.groupby(s).cumcount()+1
Out[17]: 
0    1
1    2
2    1
3    2
4    3
5    1
6    2
7    3
8    1
dtype: int64

关于python - Pandas :计算有条件的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60061041/

相关文章:

python - 使用pandas替换excel表格中的数据

java - 正则表达式 : Return a different ordering of matches in a single capturing group

python - 将字典转换为字符串python

vba - 如何使用 vba 打开 Word 应用程序

excel - SUMIFS 应考虑空白值和非空白值。使用单个公式

java - 代码执行成功,但数据仅在最后一次迭代时添加到 Excel 中

python - 在数据框列上执行 cumsum 时如何设置最小值(物理库存不能低于 0)

python - 如何自动为python中的类添加属性?

python - 将数据框的行 reshape 为列

python - 动态访问 Pandas 数据框列