Pandas DF 上的 Cumsum,负累积值重置为零

2023-11-30

我在 Pandas DF 中有一个时间顺序分组表。我正在尝试在组内创建一个运行总和,条件是运行总和不能为负数,即当运行总和变为负数时,列单元格值重置为零,并继续运行总和计算以保持完整性和数据质量。

我已将 cumsum() 与 groupby() 函数一起使用,但似乎无法即时将累积值重置为零。我还研究了下面的线程,但这与略有不同的问题相关:

Pandas dataframe - 重置运行总和

下面是代码(带有我一直在使用的示例数据):

group = ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C']
values = [-5, 4, 2, -4, -2, -2, 5, -2, 3, 6, 7, -11]
df = pd.DataFrame(list(zip(group, values)), columns =['group', 'val'])
df['cumsum_output'] = df.groupby('group')['val'].cumsum()
df['expected_out'] = [0, 4, 6, 2, 0, 0, 5, 3, 3, 9, 16, 5]

    group   val    cumsum_output    expected_out
0   A        -5               -5               0
1   A         4               -1               4
2   A         2                1               6
3   A        -4               -3               2
4   A        -2               -5               0
5   B        -2               -2               0
6   B         5                3               5
7   B        -2                1               3
8   C         3                3               3
9   C         6                9               9
10  C         7               16              16
11  C       -11                5               5

['cumsum_output' 是我从当前代码中得到的;而“expected_out”是我想要实现的理想目标。] 感谢任何在解决此问题方面有更好想法和建议的人提供的帮助和建议:-)

Cheers,

Nad


咱们试试吧:

neg = df['val'] < 0
df['output'] = df['val'].groupby([neg[::-1].cumsum(),df['group']]).cumsum().clip(0)

Output:

   group  val  cumsum_output  expected_out  output
0      A   -5             -5             0       0
1      A    4             -1             4       4
2      A    2              1             6       6
3      A   -4             -3             2       2
4      A   -2             -5             0       0
5      B   -2             -2             0       0
6      B    5              3             5       5
7      B   -2              1             3       3
8      C    3              3             3       3
9      C    6              9             9       9
10     C    7             16            16      16
11     C  -11              5             5       5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas DF 上的 Cumsum,负累积值重置为零 的相关文章

随机推荐

  • 如何以层次结构显示非标准化数据?

    我的问题是我想以层次结构显示数据 如下所示 Democrat County Clerk 候选人1 候选人2 Magistrate 候选人1 候选人2 候选人3 但我正在检索这样的数据集 Party Office Candidate Demo
  • 当最终网址为 https 时,如何使用 python 取消缩短(解析)网址?

    当最终的 url 是 https 时 我希望在 python 中取消缩短 解析 一个 url 我看到过这样的问题 如何使用 python 取消缩短 URL 以及其他类似的 但是正如已接受答案的评论中所述 此解决方案仅在 url 未重定向到
  • 零填充矩阵

    我有一个 16X16 矩阵 我必须将它添加到 256X256 矩阵中 谁能帮助我如何将这个 16X16 矩阵变成 256X256 并用零填充剩余的矩阵 如果您将某些内容分配给超出原始大小的元素 Matlab 会自动用零填充 gt gt A
  • 根据下一行的格式删除换行符

    我有一个这种格式的特殊文件 title1 1 texthere title2 2 texthere 我希望将所有以 开头的换行符放置为之前行的第二列 我尝试使用 sed 和以下命令来做到这一点 sed s n g filename 但它没有
  • 使用 log4net 的 RichTextBoxAppender

    有没有办法使用 log4net 以编程方式创建 RichTextBox Appender 换句话说 没有 xml app config using System using System Windows Forms using System
  • 单击日历外部时,fullcalendar 触发事件单击

    我有一份活动日期清单 当我单击列表中的事件时 我想触发与单击日历相同的操作 我的事件点击函数 eventClick function calEvent jsEvent view openEvent calEvent 尝试这个 为您的事件分配
  • 在 Windows 中获取用户日期格式

    我的问题类似于this one 但是 我不想获取日期格式locale 而是由用户设置的 原因是我正在使用pywin32与 Outlook 通信的 api 特别是按日期过滤邮件 我必须将日期传递给应用程序的格式是用户设置的格式 否则它将无法工
  • MATLAB 类 getter 和 setter

    我有 Java 背景 我在 Matlab 中的类尤其是 getter 和 setter 方面遇到问题 收到一条消息说句柄和值类之间存在冲突我有点不知道该怎么做 所以任何缺乏更好的词的帮助都会有所帮助 classdef Person prop
  • MUI 自动完成 – 从 3 个字符开始过滤

    我有这样的 Autcomplete mui 组件 它可以对复选框列表进行过滤 带有选项的弹出窗口应始终保持打开状态 我需要做的是仅当用户输入超过 3 个字符时才触发过滤
  • 循环遍历maven中的特定资源文件生成源

    我使用 maven antrun plugin 从 thrift IDL 生成源代码 我有一个单独的项目 和 jar 来保存这些生成的源 并且这个插件不支持通配符替换 所以我不能说 thrift 我使用执行任务来生成源代码并将它们复制到 s
  • 使用 dplyr 填充缺失的序列值

    我有一个数据框 其中缺少 SNAP ID 值 我想根据之前的非缺失值 lag 的序列 用浮点值填充缺失值 如果可能的话 我真的很想仅使用 dplyr 来实现这一目标 假设 永远不会丢失数据 因为我根据数据集的最小和最大之间的缺失天数生成缺失
  • Android 模拟器复选框和单选按钮错误 - ui 上显示各种不正确的状态

    最近 我发现模拟器的显示单选按钮和复选框有奇怪的行为 它不是只有 2 种 UI 状态 更具体地说 它显示 4 种不同甚至更多 我想它们是冻结的动画状态 在布局检查器和新版本的 API 上 它看起来很正常 请看下面的图片 我在 Api 版本
  • python 中 time.sleep 的奇怪打印行为[重复]

    这个问题在这里已经有答案了 我试图通过在同一行上每秒打印一个点来创建一个类似进度的东西 比如 钓鱼 之类的 这是我用的 import time print Fishing end for i in range 5 time sleep 1
  • WPF 迭代数据网格

    使用 WPF C NET4 5 使用 Visual Studio 2012 ulti 旧的 winforms 代码 foreach DataGridViewRow paretoRow in ParetoGrid Rows if Conver
  • pygame 平台游戏 - 如何使底部坚固?

    所以我正在制作一个 pygame 平台游戏 但我被困在一件事上 我找不到一种方法来使我的平台底部变得坚固 玩家可以降落在其顶部 但当它试图穿过底部时 它会弹回下方 我尝试了这个但没有成功 hits pg sprite spritecolli
  • 通过C#反射获取类内Enum的类型

    我有一个像这样的枚举 namespace EnumTest public class Enumeration public Enumeration public enum Days day sunday night monday 我怎样才能
  • MongoDB oplog有键名带点的记录,无法查询,afaict

    鉴于 Mongo 允许使用 点 设置嵌套字段 例如 rs0 PRIMARY gt db tmp update a 1 set b c 2 upsert true rs0 PRIMARY gt db tmp findOne id Object
  • jQuery 自动完成@mention

    我有 Andrew Whitaker 的这个自动完成插件 DEMO假设我有一个字符串textarea 欢迎 peterwaterber 我希望它在隐藏标签中输出为 彼得沃特伯 欢迎 我该怎么办 我不太擅长Javascript 我尝试过查看这
  • 隐式移动与复制操作和遏制

    当类有一个未定义移动操作的成员时 我很难理解隐式移动操作 int main struct A no move move copy A default A const A cout lt lt A copy ctor n A operator
  • Pandas DF 上的 Cumsum,负累积值重置为零

    我在 Pandas DF 中有一个时间顺序分组表 我正在尝试在组内创建一个运行总和 条件是运行总和不能为负数 即当运行总和变为负数时 列单元格值重置为零 并继续运行总和计算以保持完整性和数据质量 我已将 cumsum 与 groupby 函