【问题标题】:Get original values from rolling sum in Pandas DataFrame从 Pandas DataFrame 中的滚动总和中获取原始值
【发布时间】:2021-12-14 07:58:23
【问题描述】:

我得到了描述特定日期和地区新住院人数的数据。 住院人数为过去 7 天新增住院人数的滚动总和。 DataFrame 如下所示:

Date         Region      sum_of_last_7_days
01.01.2020   1           1
02.01.2020   1           2
03.01.2020   1           3
04.01.2020   1           4
05.01.2020   1           5
06.01.2020   1           6
07.01.2020   1           7
08.01.2020   1           7
09.01.2020   1           7
01.01.2020   2           1
02.01.2020   2           2
03.01.2020   2           3
04.01.2020   2           4
05.01.2020   2           5
06.01.2020   2           6
07.01.2020   2           7
08.01.2020   2           7
09.01.2020   2           7
10.01.2020   2           4

目标输出为:

Date         Region      daily_new
01.01.2020   1           1
02.01.2020   1           1
03.01.2020   1           1
04.01.2020   1           1
05.01.2020   1           1
06.01.2020   1           1
07.01.2020   1           1
08.01.2020   1           0
09.01.2020   1           0
01.01.2020   2           1
02.01.2020   2           1
03.01.2020   2           1
04.01.2020   2           1
05.01.2020   2           1
06.01.2020   2           1
07.01.2020   2           1
08.01.2020   2           0
09.01.2020   2           0
10.01.2020   2           0

方法应该是通过undo7天窗口的滚动求和操作,但我没有找到任何解决方案。

【问题讨论】:

  • 你的输出不正确,如果cumsum是[…, 6, 7, 7, 7],那么输入是[…, x, 1, 0, 0]
  • @mozway:您需要考虑到它是移动窗口上的总和,而不是标准的 cumsum。

标签: python pandas dataframe rolling-computation


【解决方案1】:

要获取原始值,请执行diff 并填写第一个值:

s = df.groupby('Region')['sum_of_last_7_days'].diff()
df['original'] = s.mask(s.isna(), df['sum_of_last_7_days'])

输出:

          Date  Region  sum_of_last_7_days  original
0   01.01.2020       1                   1       1.0
1   02.01.2020       1                   2       1.0
2   03.01.2020       1                   3       1.0
3   04.01.2020       1                   4       1.0
4   05.01.2020       1                   5       1.0
5   06.01.2020       1                   6       1.0
6   07.01.2020       1                   7       1.0
7   08.01.2020       1                   7       0.0
8   09.01.2020       1                   7       0.0
9   01.01.2020       2                   1       1.0
10  02.01.2020       2                   2       1.0
11  03.01.2020       2                   3       1.0
12  04.01.2020       2                   4       1.0
13  05.01.2020       2                   5       1.0
14  06.01.2020       2                   6       1.0
15  07.01.2020       2                   7       1.0
16  08.01.2020       2                   7       0.0
17  09.01.2020       2                   7       0.0

【讨论】:

  • 我更正了目标输出。我认为,您的解决方案存在问题,因为当我们到达 f.e.区域 2 为 10.01.2020,其中 sum_of_last_7_days 4 (0+0+1+1+1+1),原始值应为零,但您得到 -3 (4-7),不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
相关资源
最近更新 更多