最近 n_days 使用 groupby 在特定列上的累积总和

Posted

技术标签:

【中文标题】最近 n_days 使用 groupby 在特定列上的累积总和【英文标题】:Cumulative sum on specific column with groupby on last n_days 【发布时间】:2020-09-22 18:25:56 【问题描述】:

我正在尝试对 last_n 行的列执行滚动求和,并转换为数据框中的新列,并按不同的列分组。所以这是我拥有的数据框类型的示例:


id.   a.   b.    c.    date.    
01    0    abc   def   1/22/20  
01    2    abc   def   1/23/20  
01    1    abc   def   1/24/20  
01    1    abc   def   1/25/20  
02    4    abc   def   1/22/20  
02    5    abc   def   1/23/20  
02    5    abc   def   1/24/20  
02    0    abc   def   1/25/20  
03    1    abc   def   1/22/20  
03    0    abc   def   1/23/20  
03    2    abc   def   1/24/20  
03    2    abc   def   1/25/20  
.
.
.

这些是任意值,但假设我想对每个idcolumn=a. 的过去 2(示例)天进行滚动求和。输出应如下所示:

如果过去的 n 天不存在,只需将 0 添加到累计总和中。


id.   a.   b.    c.    date.    rolling_2_a
01    0    abc   def   1/22/20  0
01    2    abc   def   1/23/20  2
01    1    abc   def   1/24/20  3
01    1    abc   def   1/25/20  2
02    4    abc   def   1/22/20  4
02    5    abc   def   1/23/20  9
02    5    abc   def   1/24/20  10
02    0    abc   def   1/25/20  5
03    1    abc   def   1/22/20  1
03    0    abc   def   1/23/20  1
03    2    abc   def   1/24/20  2
03    2    abc   def   1/25/20  4

.
.
.

我知道如何根据 id 进行求和,但在这里使用日期元素 + last_n 要求,我不确定 pandas 是否具有该功能。

为此,我们假设date 列也可能未排序,但两者的示例将不胜感激。

【问题讨论】:

【参考方案1】:

重症监护室

#Coerce date to datetime
  df['date.']=pd.to_datetime(df['date.'])

#Set date as index
  df.set_index('date.', inplace=True)

#Group by id 

 df['rolling_2_a']=df.groupby(df['id.'])['a.'].transform(lambda x: x.rolling('2D').sum()).fillna(0)

【讨论】:

我在.rolling('2D') 上收到了ValueError: window must be an integer,但将其更改为.rolling(2) 似乎可行。你能解释一下发生了什么吗?同样在这种情况下,是考虑当天还是对n-2求和? 来自文档pandas.pydata.org/pandas-docs/stable/reference/api/… '2' 将为您提供窗口长度为 2 的 Rolling sum,min_periods 默认为窗口长度。 2D 将为您提供最短周期。我的解决方案应该有效。确保将日期设置为日期时间,并在将其强制为日期时间后将其设置为索引。然后使用 groupby 啊,是的,我以为我的专栏已经在日期时间了,这就是问题所在。谢谢!我不明白窗口长度和“2D”最小周期之间的区别,任何输入都表示赞赏

以上是关于最近 n_days 使用 groupby 在特定列上的累积总和的主要内容,如果未能解决你的问题,请参考以下文章

pandas groupby 按总和聚合特定列,按最常见值聚合其他列

Pandas groupby 将特定函数聚合/应用到特定列(np.sum,sum)

使用 groupby 变换从特定行中减去值

Groupby 并根据熊猫数据框中的其他列比较/过滤特定组

Pandas GroupBy 并选择特定列中具有最小值的行

进行 groupby 时保留其他列