[英]Pandas DateTimeIndex multiple groupby or resample aggregation
我在帶有 DateTimeIndex 的 Pandas 數據框中有數年的數據,其中每 30 分鍾測量一次記錄。 我想每個月平均 30 分鍾。 換句話說,對於每個月,我想要每個月匯總的每 30 分鍾(00:00、00:30、...、23:30)的平均值。
示例數據。
from datetime import datetime
import numpy as np
import pandas as pd
datetime_idx = pd.date_range(datetime(2017,1,1), datetime(2018,1,1), freq='30min')
np.random.seed(23)
data = np.random.randint(0, 100, size=len(datetime_idx))
df = pd.DataFrame({'Z': pd.Series(data, datetime_idx)})
df.head()
Z
2017-01-01 00:00:00 83
2017-01-01 00:30:00 40
2017-01-01 01:00:00 73
2017-01-01 01:30:00 54
2017-01-01 02:00:00 31
我試過鏈接重采樣,但沒有奏效。
df.Z.resample('30min').mean().resample('M').mean()
2017-01-31 49.177419
2017-02-28 50.740327
2017-03-31 49.954973
2017-04-30 48.345833
2017-05-31 49.268145
2017-06-30 48.943056
2017-07-31 49.741263
2017-08-31 49.827285
2017-09-30 50.442361
2017-10-31 48.679435
2017-11-30 49.754861
2017-12-31 50.173387
2018-01-31 94.000000
Freq: M, Name: Z, dtype: float64
不熟悉resample()
。 所以我做了一些改變。
我將索引創建為一列,並使用groupby()
來獲取平均值
df = pd.DataFrame({'Z': pd.Series(data),'ts': pd.Series(datetime_idx)})
df.groupby([df.ts.dt.month,df.ts.dt.hour,df.ts.dt.minute])['Z'].mean()
在我這邊,這兩個返回相同的結果
df.groupby(df.index.strftime('%Y%m')).mean()
Out[1199]:
Z
201701 49.177419
201702 50.740327
201703 49.954973
201704 48.345833
201705 49.268145
201706 48.943056
201707 49.741263
201708 49.827285
201709 50.442361
201710 48.679435
201711 49.754861
201712 50.173387
201801 94.000000
df.Z.resample('M').mean()
Out[1198]:
2017-01-31 49.177419
2017-02-28 50.740327
2017-03-31 49.954973
2017-04-30 48.345833
2017-05-31 49.268145
2017-06-30 48.943056
2017-07-31 49.741263
2017-08-31 49.827285
2017-09-30 50.442361
2017-10-31 48.679435
2017-11-30 49.754861
2017-12-31 50.173387
2018-01-31 94.000000
Freq: M, Name: Z, dtype: float64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.