如何解决熊猫的每月累积总金额在每个新月初重置为零
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个)
答案)),但分组应按
要以这种方式计算新列,请运行:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。