gpt4 book ai didi

datetime - 将 pandas 多索引转换为 pandas 时间戳

转载 作者:行者123 更新时间:2023-12-02 20:04:14 25 4
gpt4 key购买 nike

我正在尝试将非堆叠多索引数据帧转换回单个 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

然后我应用多重索引和拆栈,这样我就可以将年度数据绘制在彼此之上,如下所示:

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')

我五月前两天的数据框如下所示:

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

上面显示的数据框的索引现在如下所示:

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)

最佳答案

正如您似乎经历过的那样,在 pandas 中来回转换数据很快就会变得困惑。关于 pandas 和索引,我的一般建议是永远不要只设置索引,而是先复制它。确保您有一个包含索引的列,因为 pandas 不允许对索引进行所有操作,并且强烈的索引设置和重置可能会导致列消失。

TLDR;不要将索引转换回来。保留一份副本。

关于datetime - 将 pandas 多索引转换为 pandas 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26505140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com