我有一张这样的 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让我们结合shift
与 diff
并使用 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/