首页 > 解决方案 > 创建缺少月份和年份且对应值为零的新行

问题描述

我已经在几个月内使用 group by 提取了详细信息。但不幸的是,如果月份中不存在数据,则不会为该月份创建任何记录

请帮助我为每个公司创建新记录,其中数据范围从 2019 年 4 月开始,到 2020 年 2 月结束。

Company     year    month   Quantity
A           2019    4          1
A           2019    5          12
A           2019    6          13
A           2019    11         23
A           2020    2          34
B           2019    8          32
B           2019    12         2
B           2020    2          32

完全按照以下格式。任何输入都会有很大帮助。

Company     year    month   Quantity
A           2019    1          0
A           2019    2          0
A           2019    3          0
A           2019    4          0
A           2019    5          12
A           2019    6          13
A           2019    7          0
A           2019    8          0
A           2019    9          0
A           2019    10         0
A           2019    11         23
A           2019    12         0
A           2020    1          0
A           2020    2          34
B           2019    1          0
B           2019    2          0
B           2019    3          0
B           2019    4          0
B           2019    5          0
B           2019    6          0
B           2019    7          0
B           2019    8          32
B           2019    9          0
B           2019    10         0
B           2019    11         0
B           2019    12         2
B           2020    1          0
B           2020    2          32

标签: pythonpandasdataframepandas-groupby

解决方案


如果想要整月MultiIndex.from_product使用Series.reindex

mux = pd.MultiIndex.from_product([df['Company'].unique(),
                                  df['year'].unique(),
                                  range(1, 13)], names=['Company','year','month'])

df = df.set_index(['Company','year','month']).reindex(mux, fill_value=0).reset_index()

Series.between如有必要,通过最大和最小日期时间使用的原始数据过滤出最小和最大日期时间:

orig = pd.to_datetime(df[['year','month']].assign(day=1))
new = pd.to_datetime(df1[['year','month']].assign(day=1))

df1 = df1[new.between(orig.min(), orig.max())]
print (df1)
   Company  year  month  Quantity
3        A  2019      4         1
4        A  2019      5        12
5        A  2019      6        13
6        A  2019      7         0
7        A  2019      8         0
8        A  2019      9         0
9        A  2019     10         0
10       A  2019     11        23
11       A  2019     12         0
12       A  2020      1         0
13       A  2020      2        34
27       B  2019      4         0
28       B  2019      5         0
29       B  2019      6         0
30       B  2019      7         0
31       B  2019      8        32
32       B  2019      9         0
33       B  2019     10         0
34       B  2019     11         0
35       B  2019     12         2
36       B  2020      1         0
37       B  2020      2        32

推荐阅读