基于布尔值的累计和

Cumulative sum based on a boolean

我有一个如下所示的数据框:

finalcheck
False
True
True
True
False
True

我想在此数据框中创建另一列,它会根据 finalcheck 变量为我提供累计总和,如下所示:

finalcheck position
False 1
True 2
True 3
True 4
False 1
True 2

我尝试了多种方法来实现这一点,但我能得到的最接近的方法是在 pandas:

中使用带有 cumsum 函数的 groupby

df['position'] = df.groupby((df.finalcheck).cumsum())

这没有给我想要的输出。你能帮我找出我哪里出错了吗?

这是一个 gap-and-island 问题。每次遇到 False 时,您都会开始一个新的岛屿。然后在每个岛内,您只需按顺序对行进行编号:

# The islands
s = df["finalcheck"].eq(False).cumsum()

# Within each island, label the rows sequentially
df['position'] = s.groupby(s).cumcount() + 1
summ = 0
for i in range(0,len(df)):

    if df["finalcheck"].iloc[i] == "True":
        summ = summ + 1
        df["position"].iloc[i] = summ
    else:
        summ = 0

如果你不考虑 groupby,你可以试试这个