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

我遇到一种情况,我需要从值增加和减少的 DataFrame 中计算一天的客户总数。但这里有一个问题:


如果我有一个像这样的数据框


DATETIME                CLIENTS

2018-03-03 08:00:00     1

2018-03-03 09:00:00     2

2018-03-03 10:00:00     3

2018-03-03 11:00:00     4

2018-03-03 12:00:00     5

2018-03-03 13:00:00     3

2018-03-03 14:00:00     4

2018-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 来实现它。将不胜感激任何帮助!


芜湖不芜
浏览 102回答 2
2回答

慕码人2483693

您的逻辑是您只想计算进入的访客,而不是离开的访客。现在,如果你取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               )输出:DATETIME2018-03-03    7.0Name: CLIENTS, dtype: float64

慕桂英3389331

如果您的 MySql 版本是 8.0+,那么您可以使用LAG()窗口函数和聚合:select  sum(case when clients > prev then clients - prev end) totalfrom (  select *, lag(clients, 1, 0) over (order by datetime) prev  from tablename  where date(datetime) = '2018-03-03') t
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python