亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算一段時間內值增加和減少的最大總計

計算一段時間內值增加和減少的最大總計

蕪湖不蕪 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個贊

您的邏輯是您只想計算進入的訪客,而不是離開的訪客?,F在,如果你取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 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號