Alf*_* M. 2 python time-series pandas
从一年中在一天中不同时间测得的温度的多年记录开始,我希望得出一个矩形的每日平均值数组,每一行代表一年的数据。
数据看起来像这样
temperature.head()
date
1996-01-01 00:00:00 7.39
1996-01-01 03:00:00 6.60
1996-01-01 06:00:00 7.39
1996-01-01 09:00:00 9.50
1996-01-01 12:00:00 11.00
Name: temperature, dtype: float64
Run Code Online (Sandbox Code Playgroud)
我用
import pandas as pd
daily = temperature.groupby(pd.TimeGrouper(freq='D')).mean()
Run Code Online (Sandbox Code Playgroud)
哪个产量
daily.head()
date
1996-01-01 9.89625
1996-01-02 10.73625
1996-01-03 6.98500
1996-01-04 5.62250
1996-01-05 8.84625
Freq: D, Name: temperature, dtype: float64
Run Code Online (Sandbox Code Playgroud)
现在对于最后一部分,我想到了类似
yearly_daily_mean = daily.groupby(pd.TimeGrouper(freq='12M', closed="left"))
Run Code Online (Sandbox Code Playgroud)
但是这里有一些问题。
我在用
array_temperature = np.column_stack([group[1] for group in yearly_daily_mean if len(group[1]) == 365])
Run Code Online (Sandbox Code Playgroud)
但是应该有更好的方法。
作为一个附属问题,我如何选择数据年份的开始日期?
如果我对您的理解正确,则希望将每日均值(已经计算过)的时间序列重塑为一个矩形数据框,其中不同的天为列,不同的年为行。
这可以通过熊猫重塑功能轻松实现,例如pivot:
一些伪数据:
In [45]: index = pd.date_range(start=date(1996, 1,1), end=date(2010, 6, 30), freq='D')
In [46]: daily = pd.DataFrame(index=index, data=np.random.random(size=len(index)), columns=['temperature'])
Run Code Online (Sandbox Code Playgroud)
首先,我添加带有年份和年份的列:
In [47]: daily['year'] = daily.index.year
In [48]: daily['day'] = daily.index.dayofyear
In [49]: daily.head()
Out[49]:
temperature year day
1996-01-01 0.081774 1996 1
1996-01-02 0.694968 1996 2
1996-01-03 0.478050 1996 3
1996-01-04 0.123844 1996 4
1996-01-05 0.426150 1996 5
Run Code Online (Sandbox Code Playgroud)
现在,我们可以重塑此数据框:
In [50]: daily.pivot(index='year', columns='day', values='temperature')
Out[50]:
day 1 2 ... 365 366
year ...
1996 0.081774 0.694968 ... 0.679461 0.700833
1997 0.043134 0.981707 ... 0.009357 NaN
1998 0.257077 0.297290 ... 0.701941 NaN
... ... ... ... ... ...
2008 0.047145 0.750354 ... 0.996396 0.761159
2009 0.348667 0.827057 ... 0.881424 NaN
2010 0.269743 0.872655 ... NaN NaN
[15 rows x 366 columns]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |