首页 > 解决方案 > 用上一年同月的值填充列

问题描述

如何使用上一年同月的值填写下表中 2020 年的值:

Category   Month   Year   Value
  A          1     2019    15
  B          2     2019    20
  A          2     2019    90
  A          3     2019    50
  B          4     2019    40
  A          5     2019    20
  A          6     2019    15
  A          7     2019    17
  A          8     2019    18
  A          9     2019    12
  A          10    2019    11
  A          11    2019    19
  A          12    2019    15
  A          1     2020    18
  A          2     2020    53
  A          3     2020    80

最终期望的结果如下:

Category   Month   Year   Value
  A          1     2019    15
  B          2     2019    20
  A          2     2019    90
  A          3     2019    50
  B          4     2019    40
  A          4     2019    40
  A          5     2019    20
  A          6     2019    15
  A          7     2019    17
  A          8     2019    18
  A          9     2019    12
  A          10    2019    11
  A          11    2019    19
  A          12    2019    15
  A          1     2020    18
  A          2     2020    53
  A          3     2020    80
  B          4     2020    40
  A          4     2020    40
  A          5     2020    20
  A          6     2020    15
  A          7     2020    17
  A          8     2020    18
  A          9     2020    12
  A          10    2020    11
  A          11    2020    19
  A          12    2020    15

我尝试使用 pandas groupby 但不确定这是否是正确的方法。

标签: pythonpandas

解决方案


IIUC 我们使用pivotthen ffillwithstack

s=df.pivot_table(index=['Category','Year'],columns='Month',values='Value').groupby(level=0).ffill().stack().reset_index()
   Category  Year  level_2     0
0         A  2019        1  15.0
1         A  2019        2  90.0
2         A  2019        3  50.0
3         A  2019        5  20.0
4         A  2019        6  15.0
5         A  2019        7  17.0
6         A  2019        8  18.0
7         A  2019        9  12.0
8         A  2019       10  11.0
9         A  2019       11  19.0
10        A  2019       12  15.0
11        A  2020        1  18.0
12        A  2020        2  53.0
13        A  2020        3  80.0
14        A  2020        5  20.0
15        A  2020        6  15.0
16        A  2020        7  17.0
17        A  2020        8  18.0
18        A  2020        9  12.0
19        A  2020       10  11.0
20        A  2020       11  19.0
21        A  2020       12  15.0
22        B  2019        2  20.0
23        B  2019        4  40.0

推荐阅读