python - 计算 Pandas 中每天重置的累积盘中指标
问题描述
我在 python 中有一个 pandas 数据框,由date_time
作为 datetime 对象的 date 和 time组成的列,date
作为 string 的 date 和一个 scalar measure 组成t
。我想计算t
每天的累积值,然后在第二天开始时将其重置为零。有没有一种简单的方法可以做到这一点?我目前正在对数据框进行分组df.groupby('date')
。
解决方案
重置的累积总和相当于将其应用于组:每个新组将在开始时重置累积总和。
用一个好的最小可重现示例来说明答案总是更容易:
df = pd.DataFrame([
['20191224', '20191224 01:00', 50, 'Merry'],
['20191224', '20191224 02:30', 50, 'Christmas'],
['20191225', '20191225 02:00', 50, 'Merry'],
['20191225', '20191225 04:25', 50, 'Christmas'],
['20191225', '20191225 06:50', 50, ':)']],
columns = ['date_str', 'date_time', 'quantity', 'msg'])
确保将“date_time”列转换为实际时间戳(文档中的所有时间格式)
df['date_time'] = pd.to_datetime(df['date_time'], format = "%Y%m%d %H:%M")
确保您的日期是有序的(很重要cumsum
)
df = df.sort_values('date_time')
您可以groupby date_str
代表您的日常小组:
df.groupby('date_str').agg({
'quantity': 'sum',
'message': lambda x: x.join(' ')
})
quantity msg
date_str
20191224 100 Merry Christmas
20191225 150 Merry Christmas :)
就您而言,您想要的是transform
cumsum
:
df['daily_cum_quantity'] = df.groupby('date_str')['quantity'].transform('cumsum')
导致 :
date_str date_time quantity msg cum_quantity
0 20191224 2019-12-24 01:00:00 50 Merry 50
1 20191224 2019-12-24 02:30:00 50 Christmas 100
2 20191225 2019-12-25 02:00:00 50 Merry 50
3 20191225 2019-12-25 04:25:00 50 Christmas 100
4 20191225 2019-12-25 06:50:00 50 :) 150
推荐阅读
- google-apps-script - UrlFetchApp.fetch() 在约 4 秒后突然产生“异常:超时”错误
- typescript - 尝试在模块中传递环境变量
- firebase-realtime-database - 如何处理 Firebase 电子邮件警告
- java - 如何从Java中的聚合桶中获取值以获取elasticsearch聚合查询结果
- java - 为什么我得到:'%','(',
,, '?', FUNCTION 或标识符,得到 '('? - c# - 从 dataGridView INTO 数据库表中插入列值
- php - 在php中删除所有没有az和波兰字符的字符
- asp.net-core - 基于声明的授权未找到用户实际拥有的声明
- verilog - 总是和初始的区别
- xml - 空手道中带有“字符串”XML 的 Def 变量