【发布时间】:2020-01-05 05:38:59
【问题描述】:
我希望获得每个月的销售数量,即使产品缺少某个时期的销售数据。考虑以下示例:
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('1/1/2001','31/12/2001', freq = 'd')
sales = [np.random.randint(100) for _ in range(len(dates))]
product = [['A', 'B', 'C'][np.random.randint(3)] for _ in range(len(dates))]
df = pd.DataFrame({'Dates': dates,
'Sales': sales,
'Product': product
})
march = df.Dates.dt.month == 3
df = df[~march]
所有行军数据都被删除。当我打印出来时,我希望这些销售额显示为零:
monthly = pd.Grouper(key='Dates', freq='M')
sum_sales = df.groupby(['Product', monthly])['Sales'].sum()
其中sum_sales 仅针对产品 A 如下(注意缺少 3 月时间步长):
Product Dates
A 2001-01-31 658
2001-02-28 460
2001-04-30 541
2001-05-31 701
2001-06-30 517
2001-07-31 596
2001-08-31 802
2001-09-30 654
2001-10-31 561
2001-11-30 473
2001-12-31 605
但是,如果我只是简单地执行df.groupby(monthly)['Sales'].sum() 而不按产品分组,我会得到预期的零。
Dates
2001-01-31 1616
2001-02-28 1256
2001-03-31 0
2001-04-30 1555
2001-05-31 1384
2001-06-30 1451
2001-07-31 1677
2001-08-31 1472
2001-09-30 1535
2001-10-31 1316
2001-11-30 1573
2001-12-31 1403
所以只是想知道如何让 pandas 在groupby 中使用多个东西时将缺失的日期显示为零销售额。
【问题讨论】:
标签: pandas pandas-groupby