我有一个项目数据框
id date [other_cols]
1 2015-01-01 ...
2 2015-05-13 ...
3 2015-08-05 ...
(其中日期是每件商品的“购买日期”) 我想计算每个月库存中总共有多少件物品。示例结果将是
2015-01 1
2015-02 1
2015-03 1
2015-04 1
2015-05 2
2015-06 2
2015-07 2
2015-08 3
2015-09 3
...
2021-01 3
我怎样才能做到这一点?
答案 0 :(得分:3)
使用 GroupBy.size
将列转换为月份期间,然后使用 Series.reindex
将所有可能的期间按 period_range
,最后添加 Series.cumsum
以获得累积总和:
df['date'] = pd.to_datetime(df['date']).dt.to_period('m')
p = pd.period_range(df['date'].min(), pd.to_datetime('today').to_period('m'), freq='m')
s = df.groupby('date').size().reindex(p, fill_value=0).cumsum()
print (s)
2015-01 1
2015-02 1
2015-03 1
2015-04 1
2015-05 2
..
2020-09 3
2020-10 3
2020-11 3
2020-12 3
2021-01 3
Freq: M, Length: 73, dtype: int64
带有 Series.resample
和 date_range
的日期时间的解决方案:
df['date'] = pd.to_datetime(df['date'])
s = df.resample('MS', on='date').size()
r = pd.date_range(s.index.min(), pd.to_datetime('today'), freq='MS')
s = s.reindex(r, fill_value=0).cumsum()
print (s)
2015-01-01 1
2015-02-01 1
2015-03-01 1
2015-04-01 1
2015-05-01 2
..
2020-09-01 3
2020-10-01 3
2020-11-01 3
2020-12-01 3
2021-01-01 3
Freq: MS, Length: 73, dtype: int64