pandas - Pandas 中至少过去 n 周的最后一个季度的滚动平均值(如果存在至少一个数据点)
问题描述
我需要从数据帧计算计算如下:
我有一个包含三列(W、Q、Val)的数据框。数据是时间,因此我们可以将 W 视为周,将 Q 视为 Qtr(为了清楚起见,我们也可以添加一年)
df
W Q Val
1 1 0
2 1 6
3 1 9
4 1 13
5 1 19
6 1 10
7 2 6
8 2 8
9 2 16
10 2 NULL
11 2 NULL
12 2 NULL
13 3 1
14 3 2
15 3 6
16 3 12
17 3 NULL
18 3 NULL
19 4 14
20 4 2
21 4 4
22 4 7
23 4 7
24 4 13
1 1 14
2 1 2
3 1 4
4 1 7
5 1 9
6 1 13
所以我想要执行的事情如下(我假设我们在一个季度中有 6 周(假设 6 而不是 13 减少打字)周):
对于每个季度,我想检查最后一个季度的最后 3 (n=3) 周,如果它不为空,那么我平均该季度所有周的数据,否则如果数据为 NULL(在 3 周上个季度),然后我检查同一季度的前 3 周并取平均值(如果它也为空,则分配 0 )。
现在有两个紧迫的问题,如何进行汇总,并确保按时间顺序进行汇总,假设 Q4 之后是 Q1 等等。我在下面显示了预期的输出。
为了解释下面的输出,我们看到在第一季度(比如前一年)我们没有任何数据,所以所有汇总平均值都是 NULL。但是在第二季度,我们看到第一季度我们有最后 3 周(我们有 13+19+13 =42,平均为 13),所以我们有 13 作为第二季度所有周的平均值。对于 Q3,我们看到 Q2 的最后 3 周没有数据,所以我们转到前 3 周(在本例中为 6、8、16,平均值为 10),因此所有周的 avg 值Q3 应该是 10 等等。
现在,当我们移至明年第一季度时,我们应该按照去年第四季度的类似逻辑进行汇总。
output_df
W Q ValAVG
1 1 NULL
2 1 NULL
3 1 NULL
4 1 NULL
5 1 NULL
6 1 NULL
7 2 13
8 2 12
9 2 13
10 2 13
11 2 13
12 2 13
13 3 10
14 3 10
15 3 10
16 3 10
17 3 10
18 3 10
19 4 12
20 4 12
21 4 12
22 4 12
23 4 12
24 4 12
1 1 9
2 1 9
3 1 9
4 1 9
5 1 9
6 1 9
老实说,不知道如何实现逻辑。任何帮助或指导都将受到极大的重视。提前致谢。
解决方案
推荐阅读
- java - 调用 onSaveInstanceState 后 GridLayoutManager 变为 LinearLayoutManager
- java - 如何使用android studio在firebase上注册表格包括fname姓氏等
- python - 如何仅在 python 中使用输入函数在列表中输入值?
- javascript - SVG在滚动动画上调整大小断断续续/口吃
- java - 我无法在 Eclipse 中连接数据库
- java - 如何使用 Selenium 和 Java 将文本发送到 Angular 页面中的金额字段
- python-3.x - 调试 Numpy VisibleDeprecationWarning(来自参差不齐的嵌套序列的 ndarray)
- php - 不应静态调用非静态方法 App\User::products()
- windows - Pod 立即从 Jenkins 终止到 Kubernetes 集群
- image - Markdown 图片标题