roi*_*3ie 6 plot datetime dataframe pandas
我想一个转换开拆的,多索引的数据帧回单大熊猫日期时间指数.
我的原始数据框的索引,即多索引和取消堆栈之前的索引如下所示:
In [1]: df1_season.index
Out [1]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-01 02:00:00, ..., 2014-07-31 23:00:00]
Length: 1472, Freq: None, Timezone: None
Run Code Online (Sandbox Code Playgroud)
然后我应用多索引和取消堆栈,所以我可以将年度数据绘制在彼此之上,如下所示:
df_sort = df1_season.groupby(lambda x: (x.year, x.month, x.day, x.hour)).agg(lambda s: s[-1])
df_sort.index = pd.MultiIndex.from_tuples(df_sort.index, names=['Y','M','D','H'])
unstacked = df_sort.unstack('Y')
Run Code Online (Sandbox Code Playgroud)
我五月前两天的新数据框架如下所示:
In [2]: unstacked
Out [2]:
temp season
Y 2013 2014 2013 2014
M D H
5 1 2 24.2 22.3 Summer Summer
8 24.1 22.3 Summer Summer
14 24.3 23.2 Summer Summer
20 24.6 23.2 Summer Summer
2 2 24.2 22.5 Summer Summer
8 24.8 22.2 Summer Summer
14 24.9 22.4 Summer Summer
20 24.9 22.8 Summer Summer
736 rows × 4 columns
Run Code Online (Sandbox Code Playgroud)
上面显示的新数据框的索引现在如下所示:
In [2]: unstacked.index.values[0:8]
Out [2]:
array([(5, 1, 2), (5, 1, 8), (5, 1, 14), (5, 1, 20), (5, 2, 2), (5, 2, 8), (5, 2, 14),
(5, 2, 20], dtype=object)
Run Code Online (Sandbox Code Playgroud)
相对于xticks(主要和次要),它不会产生非常好的情节.如果我可以将这个多索引转换回单个pandas datetime索引,只使用月,日和小时数据,那么主要/次要刻度将按照我想要的方式自动绘制(我认为).例如:
当前解决方案
xticks = (5, 1, 2), (5, 1, 8) … (5, 2, 20)
Run Code Online (Sandbox Code Playgroud)
所需解决方案
xticks(major) = Day, Month (displayed as MAY 01, MAY 02 etc etc)
xticks(minor) = Hour (displayed as 02h 08h … 20h)
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
import matplotlib.pyplot as plt
from numpy.random import randn
ts = pd.Series(randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
plt.figure()
for year in set(ts.index.year):
tmp = ts[str(year)].values
plt.plot(tmp, label = year)
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我认为这是比重新索引更好的实现目标的方法。你怎么认为?
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |