0

Pythonで'datetime.timedelta'オブジェクトをに変換するにはどうすればよいですか? 'pandas.tseries.offsets'例:datetime.timedelta(1)to_offset('1D')

長い話: OHLC バーを使用して Pandas DataFrame をプロットしたいのですが、データ ポイントが多すぎると、バーが細すぎてグラフが読めなくなります。その場合、チャートのバーが 100 未満になるように、より長い期間のバーを計算したいと考えています。

DataFrame df が与えられた場合 (データは 2 秒から 1 か月の周期の間であれば何でもかまいません)

  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 に答える