为了账号安全,请及时绑定邮箱和手机立即绑定

计算一段时间内值增加和减少的最大总计

计算一段时间内值增加和减少的最大总计

芜湖不芜 2023-10-18 21:24:59
我遇到一种情况,我需要从值增加和减少的 DataFrame 中计算一天的客户总数。但这里有一个问题:如果我有一个像这样的数据框DATETIME                CLIENTS2018-03-03 08:00:00     12018-03-03 09:00:00     22018-03-03 10:00:00     32018-03-03 11:00:00     42018-03-03 12:00:00     52018-03-03 13:00:00     32018-03-03 14:00:00     42018-03-03 15:00:00     5这一天的最大客户总数是7因为它上升到5at12:00:00然后值在下一小时减少,但我们不从中减去5,然后它上升到4at14:00:00所以我们添加1,5所以15:00:00我们添加另一个1所以总共有7最大客户全天。我尝试过 cumsum() 和 MAX() 因为认为这些会很有用,但是唉......我需要用 SQL 或 Python 来实现它。将不胜感激任何帮助!
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您的逻辑是您只想计算进入的访客,而不是离开的访客。现在,如果你取diff(),那么进来的就是正数,离开的就是负数。所以我们可以用 和 再次掩盖负数0。


咱们试试吧:


dates = df.DATETIME.dt.normalize()


max_visitors = (df.groupby(dates)['CLIENTS'].diff()  # find the difference

                  .fillna(df['CLIENTS'])             # these are the first records in the day

                  .clip(0)                           # replace negatives with 0

                  .groupby(dates).sum()              # sum by days

               )

输出:


DATETIME

2018-03-03    7.0

Name: CLIENTS, dtype: float64


查看完整回答
反对 回复 2023-10-18
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

如果您的 MySql 版本是 8.0+,那么您可以使用LAG()窗口函数和聚合:


select

  sum(case when clients > prev then clients - prev end) total

from (

  select *, lag(clients, 1, 0) over (order by datetime) prev

  from tablename

  where date(datetime) = '2018-03-03'

) t



查看完整回答
反对 回复 2023-10-18
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信