是否可以選擇日期時間的同一日期和小時內的所有行,然后取所有這些行的每一列的平均值,并在此創建一個新行,其中分和秒四舍五入到 00:00,其中列包含平均值?
我們的資料框如下所示:
datetime name temperature humidity wind speed
2020-02-01 00:04:12 air 8.2 87 0.4
2020-02-01 00:22:54 air 7.8 84 0.3
2020-02-01 00:47:32 air 7.5 84 0.4
2020-02-01 01:09:35 air 7.2 86 0.1
2020-02-01 01:58:02 air 6.9 80 0.0
2020-02-01 02:14:51 air 6.8 81 0.2
...
我們想要什么,因此資料框應該更改為:
datetime name temperature humidity wind speed
2020-02-01 00:00:00 air 7.83 85 0.36
2020-02-01 01:00:00 air 7.05 83 0.05
2020-02-01 02:00:00 air 6.8 81 0.2
...
我們想象一個合適的解決方案是使用 groupby 方法,我們可以按日期 小時分組,但是我們找不到獲得上述輸出的正確方法
df = pd.read_csv("file.csv")
df.groupby({date hour}).mean()
uj5u.com熱心網友回復:
df.groupby([df.datetime.astype(str).str[:13] ":00:00", df.name]).mean().reset_index()
uj5u.com熱心網友回復:
首先,您需要將日期時間欄位作為日期時間索引,以便它可以自動拆分為間隔,因為在時間戳欄位格式錯誤或格式更改的情況下,依賴字串操作很容易出錯。
你可以通過運行來做到這一點:
df['datetime'] = pd.to_datetime(df['datetime'])
然后分組并像這樣重新采樣您的資料框(H將按小時進行):
df.groupby('name').resample('H', on='datetime').mean()
例子:
data = {
'datetime':['2020-02-01 00:04:12', '2020-02-01 00:22:54', '2020-02-01 01:22:54'],
'temp':[10,20,30],
'other_metric':[100,200,300],
'name':['air','air','air']
}
df = pd.DataFrame(data)
df['datetime'] = pd.to_datetime(df['datetime'])
df.groupby('name').resample('H', on='datetime').mean()
將變成這個:
datetime temp other_metric name
2020-02-01 00:04:12 10 100 air
2020-02-01 00:22:54 20 200 air
2020-02-01 01:22:54 30 300 air
成:
temp other_metric
name datetime
air 2020-02-01 00:00:00 15.0 150.0
2020-02-01 01:00:00 30.0 300.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383782.html
下一篇:將某些分類變數更改為統一條目
