基于布尔值的累积和

发布于 2025-01-17 05:24:20 字数 854 浏览 0 评论 0原文

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

Finalcheck
False
True
True
True True
False
True

我想在此数据框中创建另一列,它根据 Finalcheck 变量给出累积总和,如下所示:

FinalcheckPosition
False1
True2
True3
True4
False1
True2

我已经尝试了多种方法来实现这一目标,但我能得到的最接近的方法是使用带有 pandas 中的 cumsum 函数的 groupby:

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

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

I have a dataframe that looks like this:

finalcheck
False
True
True
True
False
True

I want to create another column in this dataframe which gives me a cumulative sum based on finalcheck variable like so:

finalcheckposition
False1
True2
True3
True4
False1
True2

I have tried multiple ways of achieving this but the closest I could get was by using a groupby with the cumsum function in pandas:

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

This did not give me the desired output. Could you help me identify where I am going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柏拉图鍀咏恒 2025-01-24 05:24:20

这是一个缺口和岛屿问题。每次你遇到一个错误,你就会开始一个新的岛屿。然后在每个岛内,您只需按顺序对行进行编号即可:

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

# Within each island, label the rows sequentially
df['position'] = s.groupby(s).cumcount() + 1

It's a gap-and-island problem. Every time you encounter a False, you start a new island. Then within each island, you just number the row sequentially:

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

# Within each island, label the rows sequentially
df['position'] = s.groupby(s).cumcount() + 1
话少心凉 2025-01-24 05:24:20
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 之外思考,你可以尝试这个

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

If you're thinking outside of groupby, you can try this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文