计算 Pandas 中每天重置的累积盘中指标

Posted

技术标签:

【中文标题】计算 Pandas 中每天重置的累积盘中指标【英文标题】:Calculate cumulative intraday measures that reset every day in pandas 【发布时间】:2020-04-16 05:30:39 【问题描述】:

我在 python 中有一个 pandas 数据框,由 date_time 列组成,其中包含日期和时间作为日期时间对象,date 包含日期作为字符串,以及标量测量 t。我想每天计算t的累积值,然后在第二天开始时将其重置为零。有没有一种简单的方法可以做到这一点?我目前正在按df.groupby('date') 对数据框进行分组。

【问题讨论】:

请提供您的数据框示例和所需结果 我确实提供了完整的描述。 @user3607022 你没有提供minimal reproducible example 我提供了一个简短且可重复的描述。 您需要提供您正在使用的数据,以便我们可以重现您的数据/错误并根据您的示例输出为您提供解决方案。 【参考方案1】:

重置的累积总和相当于将其应用于:每个新组将在开始时重置累积总和。

用good minimal reproducible example 说明答案总是更容易:

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”列转换为实际时间戳 (all time formats in documentation)

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

【讨论】:

【参考方案2】:
temp = df.groupby('date')['t'].cumsum().rename('t_cumulative')
df = df.merge(temp, on='date_time', how='outer')

【讨论】:

以上是关于计算 Pandas 中每天重置的累积盘中指标的主要内容,如果未能解决你的问题,请参考以下文章

制作每日重置的 InfluxDB/Grafana 累积函数(锯齿图)

SQL 计算基于 Hive 列中先前值重置的累积总和

根据条件重置的 7 天累积总和

基于条件的累积和,但条件结束后会重置

Pandas 数据框 - 运行总和并重置

输出累积每次迭代而不是重置[关闭]