0

如何在 Python 中将'datetime.timedelta'对象转换为 a ?'pandas.tseries.offsets'例如:datetime.timedelta(1)to_offset('1D')

长话短说:我想绘制一个带有 OHLC 条的 Pandas DataFrame,但是当数据点太多时,条太细,图表变得不可读。在这种情况下,我想计算周期较长的柱,以便在我的图表上得到少于 100 个柱。

给定一个 DataFrame df(数据可以是秒到月周期之间的任何数据)

  1. 第 1 步:获取数据帧周期:

    source_period = min([t2-t1 for t2, t1 in zip(df.index[1:], df.index[:-1])])

    (我不能在这里使用 df.index.freq)

  2. 第 2 步:估计目标期间:

    target_period = source_period * float(len(df.index))/100

  3. 第 3 步:分组合并数据

    grouped_df = df.groupby(pd.TimeGrouper(period_convert(target_period ))).agg(ohlc_combine)

我想念period_convert我真的不知道从哪里开始的功能。

为了有一个起点,我的可笑丑陋的黑客这样做:

target_datapoints = 100
source_period = min([t2-t1 for t2, t1 in zip(df.index[1:], df.index[:-1])])
target_period = source_period.total_seconds() * float(len(df.index)) / target_datapoints
target_offset = str(int(target_period)) + 'S'
target_df = df.groupby(pd.TimeGrouper(target_offset)).agg(ohlc_combine)

问题:丑陋,缓慢,前卫的案件没有处理......

4

1 回答 1

1

你可以直接构建它

例如说 source period 是60S,现在 target_period 是301S,就使用它。

如果您想将这些更改为“更大”的时间段,您可以这样做(需要 numpy 1.7),(返回一个字符串):

In [18]: pd.tslib.repr_timedelta64(np.timedelta64(timedelta(seconds=301)).astype('m8[ns]'))
Out[18]: '00:05:01'

但这几乎同样难以处理。

有一个功能来实际执行此操作可能会很好。

于 2013-10-14T15:46:30.057 回答