1
我有一個包含氣象數據的數據框,每一行都是某個位置一天的數據。我想計算3天的平均值並將它們添加爲列。自然(至少對我來說)這樣做的方法是使用df.apply
;但速度很慢且耗費大量內存(目前正在使用大約3Gb的內存,並且正在上升)。我的函數如下:(合併爲數據幀和它是由行號索引)從其他行的值中創建行
def three_day_stats(row):
total_snowfall = 0
total_sunshine = 0
mean_wind = 0
mean_temp = 0
days = range(max(0, row.name-3), row.name+1)
for i in days:
day = merged.loc[i]
total_snowfall += day['Snowfall']
total_sunshine += day['Sunshine duration']
mean_wind += (1/len(days))*(day['10 metre U wind component']**2 + day['10 metre V wind component']**2)**0.5
mean_temp += (1/len(days))*day['2 metre temperature']
return pd.Series({'3 day snowfall': total_snowfall,
'3 day sunshine': total_sunshine,
'3 day wind': mean_wind,
'3 day temperature': mean_temp})
有沒有辦法做到這一點,而無需使用申請?或者至少讓它更有效?
編輯:一行數據
10 metre U wind component 2.13432
10 metre V wind component -0.932907
2 metre temperature 3.88357
Date 1996-11-01 00:00:00
Latitude 46.3975
Longitude 7.8515
Snow density 269.103
Snow depth 0.000514924
Snowfall 0
Sunshine duration 2.87365
Temperature of snow layer -0.677888
winter 2015/16
canton VS
community Baltschieder
elevation 3440
aspect_string E
Avalanche 0
Name: 0, dtype: object
@jezrael我在問題中添加了一個數據樣本。你提出的問題是,我每隔三天就會得到一次數據,而我每天都會喜歡這個數據。 – Nico