У меня есть суточные значения осадков и температуры за период в несколько лет. Я хотел бы вычислить среднее количество осадков и температуры для каждого месяца в году (с января по декабрь). Для осадков мне сначала нужно рассчитать сумму суточных осадков за каждый месяц, а затем вычислить среднее значение за тот же месяц для всех данных за все годы. Для температуры мне нужно усреднить среднемесячные значения (поэтому среднее значение всех данных за все месяцы дает точно такой же результат). Как только это будет сделано, мне нужно построить оба набора данных (осадки и температура), используя сокращенные месяцы.
Я не могу найти способ вычислить значения осадков и иметь возможность получить сумму за каждый месяц и затем усредните его за все годы. Кроме того, у меня возникают проблемы с отображением формата в сокращенных месяцах.
Это то, что я пробовал до сих пор (безуспешно):
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
example = [['01.10.1965 00:00', 13.88099957, 5.375],
['02.10.1965 00:00', 5.802999973, 3.154999971],
['03.10.1965 00:00', 9.605699539, 0.564999998],
['14.10.1965 00:00', 0.410299987, 1.11500001],
['31.10.1965 00:00', 6.184500217, -0.935000002],
['01.11.1965 00:00', 0.347299993, -5.235000134],
['02.11.1965 00:00', 0.158299997, -8.244999886],
['03.11.1965 00:00', 1.626199961, -3.980000019],
['24.10.1966 00:00', 0, 3.88499999],
['25.10.1966 00:00', 0.055100001, 1.279999971],
['30.10.1966 00:00', 0.25940001, -5.554999828]]
names = ["date","Pobs","Tobs"]
data = pd.DataFrame(example, columns=names)
data['date'] = pd.to_datetime(data['date'], format='%d.%m.%Y %H:%M')
#I think the average of temperature is well computed but the precipitation would give the complete summation for all years!
tempT = data.groupby([data['date'].dt.month_name()], sort=False).mean().eval('Tobs')
tempP = data.groupby([data['date'].dt.month_name()], sort=False).sum().eval('Pobs')
fig = plt.figure(); ax1 = fig.add_subplot(1,1,1); ax2 = ax1.twinx();
ax1.bar(tempP.index.tolist(), tempP.values, color='blue')
ax2.plot(tempT.index.tolist(), tempT.values, color='red')
ax1.set_ylabel('Precipitation [mm]', fontsize=10)
ax2.set_ylabel('Temperature [°C]', fontsize=10)
#ax1.xaxis.set_major_formatter(DateFormatter("%b")) #this line does not work properly!
plt.show()