时间序列-在python中计算不含29.02的每日平均值
问题是关于日平均值。我的降雨量列表(mm)如下所示时间序列-在python中计算不含29.02的每日平均值,python,numpy,datetime,Python,Numpy,Datetime,问题是关于日平均值。我的降雨量列表(mm)如下所示 Y = [ 22, 29, 4, 7, 10, 3, ...] X是时间序列 X= [datetime.date(1991, 1, 1), datetime.date(1991, 1, 2), datetime.date(1991, 1, 3), ... datetime.date(2017, 12, 13), datetime.date(2017, 12, 14), datetime.date
Y = [ 22,
29,
4,
7,
10,
3,
...]
X是时间序列
X= [datetime.date(1991, 1, 1),
datetime.date(1991, 1, 2),
datetime.date(1991, 1, 3),
...
datetime.date(2017, 12, 13),
datetime.date(2017, 12, 14),
datetime.date(2017, 12, 15),]
X和Y的长度相同。我可以用它来画它
我想计算列表中的日平均值,但在每个列表中跳过29.02天
闰年(因此平均列表长度为365),
也考虑不完整年(例如,在这个问题中只有11个月和15天在2017),所以新的列表(假设z)看起来像这个< /P>
Z = [ 28,
19,
...
20]
and len(Z) = 365
有人有聪明的方法来解决这个问题吗?我尝试的方式总是冗长而愚蠢。提前衷心感谢您。
pandas
TimeSeries具有该功能
更新4按日期计算的年平均数 更新3
#fixed bug in leap dates
更新2从计算中删除所有2月29日
使用问题中的数据更新1
如果您确定Y具有自1991年1月1日以来的所有天数的值,则
Y = [ 22,29,4]
df = pd.DataFrame(Y,
index = pd.date_range('01.01.1991',periods = len(Y),freq ='D', name = 'date'),
columns = ['rainfall'])
df
输出:
date rainfall
1991-01-01 22
1991-01-02 29
1991-01-03 4
rainfall
date
2000-02-28 86.0
2000-02-29 NaN
2000-03-01 83.0
month day rainfall
1 1 49.75
1 2 53.96296296296296
#.......................
12 30 48.666666666666664
12 31 57.48148148148148
若要删除所有02-29,请设置它们np.NaN
,这将从计算中排除它们
leap_y = pd.Timestamp('29.02.1992') + pd.to_timedelta(1461*np.arange(7),'D')
df.loc[leap_y,'rainfall']=np.NaN
print(df['2000-02-28':'2000-03-01'])
输出:
date rainfall
1991-01-01 22
1991-01-02 29
1991-01-03 4
rainfall
date
2000-02-28 86.0
2000-02-29 NaN
2000-03-01 83.0
month day rainfall
1 1 49.75
1 2 53.96296296296296
#.......................
12 30 48.666666666666664
12 31 57.48148148148148
年平均日数
anual = df.groupby([df.index.month.rename('month'),
df.index.day.rename('day')]).mean().dropna()
anual
输出:
date rainfall
1991-01-01 22
1991-01-02 29
1991-01-03 4
rainfall
date
2000-02-28 86.0
2000-02-29 NaN
2000-03-01 83.0
month day rainfall
1 1 49.75
1 2 53.96296296296296
#.......................
12 30 48.666666666666664
12 31 57.48148148148148
共享数据和代码。请看这里:在
Y
1991年1月1日,你每天有一件物品?@AntonvBR我已经更正了,谢谢你的友好提醒。@Ilitimofev Yes或者你的想法是放弃所有2月29日的计算,假装在那个月只有28天?前半部分非常有用,但最后我想计算一年中的日平均值(所以平均值为01.01,平均值为02.01,平均值为03.01…等等),这样一个新列表将包含365个数据,每个数据都是平均值。现在我理解了你的问题:)你可以得到闰年2月29日的正确年平均值,只需跳过df[leap\u y]=np.NaN
非常感谢!多么简洁有力:D