簡體   English   中英

如何從時間序列計算特定小時的中位數

[英]How to calculate the median for a specific hour from a time series

我有一個 df,其中包含在接下來的 10 分鍾內進行了多少次轉移的信息。 我想顯示哪些銀行在特定時間最受歡迎(我的結論是,由於中位數,我將能夠顯示這一點)。 我的支點是這樣的:


     bank_name       bank1     bank2     bank3     bank4     
date
2019-11-03           102       105       78        81      
00:00

2019-11-03           108       100       103       77       
00:10

2019-11-03
00:20                108       134       55        27        
   ...                ...      ...       ...       ...       
2019-12-22
15:30                461       312       312       253      

2019-12-22           
15:40                396       361       376       229     

或者普通的df

date                  bank_name      transfers
2019-11-03 00:00      bank1          102
2019-11-03 00:00      bank2          105
2019-11-03 00:00      bank3          78
2019-11-03 00:00      bank4          81
2019-11-03 00:10      bank1          108
2019-11-03 00:10      bank2          100
...                   ...            ...

我的預期輸出(我隨機輸入的中值)

hour   bank_name   median
00     bank2       641
01     bank2       711
02     bank1       668
...     ...        ...
23     bank3       757

一開始 II 想對2019-11-03 00:00, 00:10, 00:20, 00:30, 00:40, 00:50的值求和並將其作為值03 00 我是這樣做的:

df['date_'] = pd.to_datetime(df['date'].dt.strftime('%d %H'))

df = df.set_index('bank_name').groupby([ 'bank_name', 'date_']).agg({'transfers':np.sum})

……但我不知道接下來要做什么。 我會很感激你的幫助。

這是我將如何做到的。

import pandas as pd

df.groupby([pd.to_datetime(df['date']).dt.hour, 'bank_name'])['transfers'].median()

嘗試這個:

# median hourly transfer
hourly_transfers = df.groupby([pd.Grouper(key='date', freq='H'), 'bank_name']).median()

# which bank has the highest median in each hour
idx = hourly_transfers.groupby('date')['transfers'].idxmax()

# the result
hourly_transfers.loc[idx]

所以聽起來你需要:

  • 按小時獲取每家銀行的金額
  • 從日期中提取小時
  • 獲取所有日期的那個小時的中位數

像這樣的東西:

import datetime

df['date_hourly'] = df['date'].apply(lambda L: datetime(L.year, L.month, L.day, L.hour)) //  [From here][1]

df_hourly = df.groupby(['date_hourly', 'bank_name']).transfers.sum().reset_index()

df_hourly['hour'] = df_hourly.date_hourly.apply(lambda x: x.hour)

df_pivot = df_hourly.groupby(['hour', 'bank_name']).transfers.median().reset_index()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM