import pandas as pd
df = pd.DataFrame(
{
'StartDate':['2020-01-01 00:00:00-04:00', '2020-01-01 01:00:00-04:00', '2020-01-01 01:55:00-04:00', '2020-01-02 02:00:00-02:00', '2020-01-02 02:00:00-04:00'],
'Weight':[100, 110, 120, 125, 155]
}
)
df['StartDate'] = pd.to_datetime(df['StartDate'])
df

我想按小時對資料進行分組并總結權重列。因此,最終結果將是具有 3 行的 df:當前索引 0、當前索引 1&2、當前索引 3&4。
我遇到了Grouper功能,我嘗試了以下方法,但沒有奏效:
df = df.groupby(pd.Grouper(key='StartDate', freq='H')).sum()
我收到以下錯誤:
TypeError:僅對 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但獲得了“Index”實體
有誰知道我做錯了什么或者有人可以提供解決方案嗎?
謝謝
uj5u.com熱心網友回復:
您首先需要轉換為日期時間,同時考慮時區:
df['StartDate'] = pd.to_datetime(df['StartDate'], utc=True)
df.groupby(pd.Grouper(key='StartDate', freq='H')).sum()
輸出:
Weight
StartDate
2020-01-01 04:00:00 00:00 100
2020-01-01 05:00:00 00:00 230
2020-01-01 06:00:00 00:00 0
2020-01-01 07:00:00 00:00 0
2020-01-01 08:00:00 00:00 0
2020-01-01 09:00:00 00:00 0
2020-01-01 10:00:00 00:00 0
2020-01-01 11:00:00 00:00 0
2020-01-01 12:00:00 00:00 0
2020-01-01 13:00:00 00:00 0
2020-01-01 14:00:00 00:00 0
2020-01-01 15:00:00 00:00 0
2020-01-01 16:00:00 00:00 0
2020-01-01 17:00:00 00:00 0
2020-01-01 18:00:00 00:00 0
2020-01-01 19:00:00 00:00 0
2020-01-01 20:00:00 00:00 0
2020-01-01 21:00:00 00:00 0
2020-01-01 22:00:00 00:00 0
2020-01-01 23:00:00 00:00 0
2020-01-02 00:00:00 00:00 0
2020-01-02 01:00:00 00:00 0
2020-01-02 02:00:00 00:00 0
2020-01-02 03:00:00 00:00 0
2020-01-02 04:00:00 00:00 125
2020-01-02 05:00:00 00:00 0
2020-01-02 06:00:00 00:00 155
沒有“空白”
df.groupby(pd.to_datetime(df['StartDate'], utc=True).dt.floor('h'))['Weight'].sum()
StartDate
2020-01-01 04:00:00 00:00 100
2020-01-01 05:00:00 00:00 230
2020-01-02 04:00:00 00:00 125
2020-01-02 06:00:00 00:00 155
Name: Weight, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495449.html
