【问题标题】:Pandas time series cumsum of previous records matching a column of current row匹配当前行列的先前记录的 Pandas 时间序列累积和
【发布时间】:2021-07-29 03:41:58
【问题描述】:

我正在尝试添加一个列,该列表示与给定列的行的当前值匹配的先前记录的累积总和,让我们举个例子。

我的数据是:

|t         |label|qty|cumsum|
|2020-01-05|A    |10 |10    |
|2020-01-06|B    |5  |5     |
|2020-01-06|C    |2  |2     |
|2020-01-07|A    |-5 |5     |
|2020-01-07|A    |2  |7     |
|2020-01-08|B    |-30|-25   |
|2020-01-09|C    |5  |7     |

cumsum 列将被总结为“对标签与当前行相同的所有过去记录进行累积总和”

理想情况下,为了代码清晰,我想要一个表达式,例如 df['cumsum']=df.loc[(df['label']==current label) & (df['t'] <= current index)].cumsum(),它不会显式循环 for ix,row in df: 中的每一列之前的列

另一方面是累积和是从一开始就完成的,数据帧可能是 20 条记录长或 500k 条记录长。

另外,为了清楚起见,我只在示例中添加了 3 个标签,但我的数据集中可以有几十个标签

我发现了一些其他类似的问题,但它们并不完全适合我的需要:

欢迎任何形式的帮助! 谢谢!

【问题讨论】:

  • 第一个链接看起来是你要找的,只是你需要使用列 qty 来直接做 cumsum,试试df.groupby('label')['qty'].cumsum()?
  • 完成了这项工作!谢谢!

标签: python pandas dataframe time-series cumsum


【解决方案1】:
df.groupby('label')['qty'].transform('cumsum')

【讨论】:

  • 很高兴知道,我习惯了 itertools.groupby 并认为它在 pandas 中的工作方式相同,返回由列的不同值索引的数据框。谢谢!
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多