熊猫的每月累积总金额在每个新月初重置为零

问题描述

我有一个熊猫数据框,其中包含每日数据

Date          Value
2020-01-01    1780.2
2020-01-02    1783.3
2020-01-05    1781.5
...
2020-02-01    1816.0
2020-02-02    1810.4
...

一个月的每一天都不总是有一个值,因此可能会缺少某些天,因此timedelta并不总是1天。

我想做的就是简单地在每个月内取一个累加的总和,然后在下个月的月初将总和重置为零,因此结果如下所示:

Date          Value    Cumulative Value
2020-01-01    1780.2   1780.2
2020-01-02    1783.3   3563.5
2020-01-05    1781.5   5345.0
...
2020-02-01    1816.0   1816.0
2020-02-02    1810.4   3626.4
...

我发现this post解释了如何按月获取累计金额。但是我需要的是在每个月初将累计和重置为零。我该怎么办?

解决方法

如果多个年份按Series.dt.to_period按月份分组:

df['Cumulative Value'] = df.groupby(df['Date'].dt.to_period('m'))['Value'].cumsum()

如果可能仅使用一年,请使用Series.dt.month

df['Cumulative Value'] = df.groupby(df['Date'].dt.month)['Value'].cumsum() 

默认情况下,累积总和也重置为0,因此不必为此添加代码。

,

我认为 Date 列是 datetime 类型。如果没有,请进行转换。

据我了解,您不希望仅按月分组(例如,合计 一月,二月等所有年份的数据(例如其他2个) 答案)),但分组应按年和月(您要 在下个月初开始输入 0 表格)。

要以这种方式计算新列,请运行:

df['Cumulative Value'] = df.groupby(pd.Grouper(key='Date',freq='M')).Value.cumsum()

对于您的数据样本,结果是:

        Date   Value  Cumulative Value
0 2020-01-01  1780.2            1780.2
1 2020-01-02  1783.3            3563.5
2 2020-01-05  1781.5            5345.0
3 2020-02-01  1816.0            1816.0
4 2020-02-02  1810.4            3626.4
,

groupy()的提取月份,transform('cumsum')

 df['Cumulative Value']=df.groupby(pd.to_datetime(df.Date).dt.month).transform('cumsum')



     Date         Value        Cumulative Value
0  2020-01-01  1780.2            1780.2
1  2020-01-02  1783.3            3563.5
2  2020-01-05  1781.5            5345.0
3  2020-02-01  1816.0            1816.0
4  2020-02-02  1810.4            3626.4
,
import pandas as pd
start='2020-01-01' 
end='2020-12-31'
df = pd.DataFrame({"Date": pd.date_range(start,end)})
df['qty']=1
df = df.groupby('Date').qty.sum()
print(df.head())
df=df.groupby(df.index.month).cumsum().reset_index()
print(df.head(45))

输出:

Date
2020-01-01    1
2020-01-02    1
2020-01-03    1
2020-01-04    1
2020-01-05    1
Name: qty,dtype: int64
         Date  qty
0  2020-01-01    1
1  2020-01-02    2
2  2020-01-03    3
3  2020-01-04    4
4  2020-01-05    5
5  2020-01-06    6
6  2020-01-07    7
7  2020-01-08    8
8  2020-01-09    9
9  2020-01-10   10
10 2020-01-11   11
11 2020-01-12   12
12 2020-01-13   13
13 2020-01-14   14
14 2020-01-15   15
15 2020-01-16   16
16 2020-01-17   17
17 2020-01-18   18
18 2020-01-19   19
19 2020-01-20   20
20 2020-01-21   21
21 2020-01-22   22
22 2020-01-23   23
23 2020-01-24   24
24 2020-01-25   25
25 2020-01-26   26
26 2020-01-27   27
27 2020-01-28   28
28 2020-01-29   29
29 2020-01-30   30
30 2020-01-31   31
31 2020-02-01    1
32 2020-02-02    2
33 2020-02-03    3
34 2020-02-04    4
35 2020-02-05    5
36 2020-02-06    6
37 2020-02-07    7
38 2020-02-08    8
39 2020-02-09    9
40 2020-02-10   10
41 2020-02-11   11
42 2020-02-12   12
43 2020-02-13   13
44 2020-02-14   14

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...