7

2 つの列を持つ DataFrame があります。1 つの列にはタイムスタンプが入力され、もう 1 つの列には同じ行のタイムスタンプの UTC までの時間単位のオフセットが含まれます。

データフレームは次のようになります。

In [44]: df
Out[44]:
                     DATETIME  OFFSET

0   2013-01-01 00:00:00+00:00       1
1   2013-01-01 01:00:00+00:00       1
2   2013-01-01 02:00:00+00:00       1
3   2013-01-01 03:00:00+00:00       1
4   2013-01-01 04:00:00+00:00       1
5   2013-01-01 05:00:00+00:00       1
6   2013-01-01 06:00:00+00:00       2
7   2013-01-01 07:00:00+00:00       2
8   2013-01-01 08:00:00+00:00       2

私が達成したいのは、行ごとのオフセットをタイムスタンプに追加することです:

In [44]: df
Out[44]:
                     DATETIME  OFFSET

0   2013-01-01 00:00:00+01:00       1
1   2013-01-01 01:00:00+01:00       1
2   2013-01-01 02:00:00+01:00       1
3   2013-01-01 03:00:00+01:00       1
4   2013-01-01 04:00:00+01:00       1
5   2013-01-01 05:00:00+01:00       1
6   2013-01-01 06:00:00+02:00       2
7   2013-01-01 07:00:00+02:00       2
8   2013-01-01 08:00:00+02:00       2

tzinfo を置き換えようとしましたが、適切な解決策が見つかりませんでした。私は次のようなことを考えています(疑似コード):

df.apply(lambda x: x['DATETIME'].replace(tzinfo=pytz.utc + x['OFFSET'])

どんな助けでも大歓迎です。

ありがとう、トーマス

4

1 に答える 1

6

pytz.FixedOffsetこの目的には合っているようです。

In [39]: df.apply(lambda x: pd.Timestamp(x['DATETIME'], tz=pytz.FixedOffset(60*x['OFFSET'])), axis=1)
Out[39]: 
0    2013-01-01 00:00:00+01:00
1    2013-01-01 01:00:00+01:00
2    2013-01-01 02:00:00+01:00
3    2013-01-01 03:00:00+01:00
4    2013-01-01 04:00:00+01:00
5    2013-01-01 05:00:00+01:00
6    2013-01-01 06:00:00+02:00
7    2013-01-01 07:00:00+02:00
8    2013-01-01 08:00:00+02:00
dtype: object

このあたりでは、私よりも時系列を使用する人が多いため、これはベスト プラクティスではない可能性があります。

于 2013-06-19T18:12:58.327 に答える