在熊猫中使用 PeriodIndex 与 DateTimeIndex ?

Ale*_*lex 11 python python-3.x pandas

我正在处理一些组织为 df 的财务数据,MultiIndex其中包含股票代码和日期以及包含回报的列。我想知道是否应该将索引转换为 aPeriodIndex而不是 aDateTimeIndex因为回报实际上是在一段时间内而不是瞬间。除了哲学论点之外,还有哪些实用功能PeriodIndex在这个特定用例中可能有用DateTimeIndex

Mat*_*ian 2

DateTimeIndex 中有一些可用的函数(例如 is_month_start、is_quarter_end),但在 periodIndex 中不可用。当 DateTimeIndex 无法提供我需要的格式时,我会使用 periodIndex。例如,如果我需要 yyyy-mm 格式的每月频率,我会使用 periodIndex。

示例:假设 df 的索引为

df.index
'2020-02-26 13:50:00', '2020-02-27 14:20:00',
'2020-02-28 11:10:00', '2020-02-29 13:50:00'],
 dtype='datetime64[ns]', name='peak_time', length=1025, freq=None)
Run Code Online (Sandbox Code Playgroud)

通过以下代码可以获取每月最少数据

dfg = df.groupby([df.index.year, df.index.month]).min()
Run Code Online (Sandbox Code Playgroud)

其索引是 MultiIndex

dfg.index
MultiIndex([(2017,  1),
             ...
            (2020,  1),
            (2020,  2)],
           names=['peak_time', 'peak_time'])
Run Code Online (Sandbox Code Playgroud)

不,我将其转换为 periodIndex:

dfg["date"] = pd.PeriodIndex (dfg.index.map(lambda x: "{0}{1:02d}".format(*x)),freq="M")
Run Code Online (Sandbox Code Playgroud)