Pandas - 计算每个月的总项目数(累积总和?)

时间:2021-01-08 10:33:10

标签: python pandas

我有一个项目数据框

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

我怎样才能做到这一点?

1 个答案:

答案 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.resampledate_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
相关问题