【发布时间】:2014-12-17 18:23:42
【问题描述】:
我正在尝试将 unstacked、multi-indexed 数据框转换回 single pandas 日期时间索引。
我的原始数据框的索引,即在多索引和unstacking之前,如下所示:
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
然后我应用多索引和unstacking,这样我就可以像这样将年度数据绘制在彼此之上:
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')
我的 新 数据框在 5 月的前两天如下所示:
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
上面显示的 new 数据框的索引现在如下所示:
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)
相对于 xticks(主要和次要)不会产生非常好的情节。如果我可以将此多索引转换回单个 pandas 日期时间索引,仅使用月、日和小时数据,那么主要/次要刻度将按照我想要的方式自动绘制(我认为)。例如:
目前的解决方案:
xticks = (5, 1, 2), (5, 1, 8) … (5, 2, 20)
需要的解决方案:
xticks(major) = Day, Month (displayed as MAY 01, MAY 02 etc etc)
xticks(minor) = Hour (displayed as 02h 08h … 20h)
【问题讨论】:
-
即使是一点提示也将不胜感激。
-
我该如何提高这个以获得一些支持?这里有一些问题超过一年没有任何答案。
-
再过一个月?任何事情都会有所帮助...
-
您是否有理由要“自动”执行此操作?我可能只是编写一个函数来自定义生成 x-labels。这听起来比你想要的要快。
-
感谢他的回复。也许你是对的,只是我需要在放大时保持合理的比例。我知道使用这种方法会解决这个问题。
标签: datetime pandas plot dataframe