Python Pandas 索引排序/分组/日期时间

Posted

技术标签:

【中文标题】Python Pandas 索引排序/分组/日期时间【英文标题】:Python Pandas Index Sorting/Grouping/DateTime 【发布时间】:2015-03-27 13:48:50 【问题描述】:

我正在尝试使用一分钟数据组合 2 个单独的数据系列来创建一个比率,然后为全天的比率创建开高低收 (OHLC) 文件。我引入了两个时间序列,然后使用 pandas 创建关联的数据框。时间序列缺少数据,因此我在每个文件中创建一个 datetime 变量,然后在 datetime 变量上使用 pd.merge 方法合并文件。在这一点上,一切都很顺利。

接下来我使用 groupby 按日期对数据进行分组。然后,我将分组的数据提供给一个 for 循环,该循环计算 OHLC 并将其提供给每一天的新数据帧。但是,新填充的数据框使用日期(来自分组)作为数据框索引并且排序关闭。索引数据如下所示(即使已排序):

2013 年 1 月 29 日 2014 年 1 月 29 日 2015 年 1 月 29 日 2013 年 12 月 2 日 2014 年 12 月 2 日

简而言之,排序只在月份而不是整个日期作为日期进行,因此它不是按时间顺序排列的。我的目标是按日期对其进行排序,以便按时间顺序排列。也许我需要在引用索引的数据框中创建一个新列(不确定如何)。或者也许有一种方法可以告诉 pandas 索引是一个日期而不仅仅是一个值?我尝试使用包括 sort_index 在内的各种排序方法,但由于日期是索引并且似乎不被视为日期,因此排序函数按月排序,无论年份如何,因此我的输出文件出现故障。更笼统地说,我不确定如何引用/操作 pandas 数据框中的实际唯一标识符索引,因此任何相关材料都会很有用。

谢谢

【问题讨论】:

我一直在处理 OHLC 源的 CSI 导出,这始终是个问题。这是因为日期是字符串。您必须使用 datetime.datetime.strptime 解析它们并将它们转换为正确的 Python datetime 对象,以便 pandas 可以正确检测它们并相应地对它们进行排序。 你看s.resample('1D', how="ohlc")了吗?这应该将您的系列重新采样为每日值并自动计算 OHLC 列。并查看pd.to_datetime 将您的字符串转换为真实日期。 同意@joris。 to_datetime 是另一种选择,但对于更深奥的格式,strptimeapply 可以创造奇迹。 @TheLaughingMan to_datetime 也有一个 format 参数,所以你应该(几乎)能够用它做任何你会用 strptime 做的事情 【参考方案1】:

几年后...

这解决了问题。

df 是一个数据框

import pandas as pd
df.index = pd.to_datetime(df.index) #convert the index to a datetime object
df = df.sort_index() #sort the converted 

这应该让排序恢复到时间顺序

【讨论】:

以上是关于Python Pandas 索引排序/分组/日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas:按日期分组,并按时间戳访问每个组

Python Pandas:将日期时间列分组为小时和分钟聚合

分组日期滚动中最新非空值的 Pandas 日期索引

Pandas:使用日期时间索引进行分组前向填充

pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)

当有两个索引、pandas、python 时针对日期时间进行绘图