从另一列对Pandas DataFrame应用时移

时间:2015-11-02 18:52:22

标签: python-2.7 pandas dataframe

我正在尝试为Pandas DataFrame的DateTime索引添加一些秒。

为了做到这一点,我需要从另一列中减去这些值:

>>> frame["s_eventdatetime"] = frame["eventdatetime"].apply(lambda x: x - datetime.timedelta(seconds=frame["seconds"])) 
TypeError: unsupported type for timedelta seconds component: Series

有人知道如何为相应的行值执行此操作,每行的值不同。没有恒定的价值。我认为这会失败,因为有些行有NaN条目。

1 个答案:

答案 0 :(得分:1)

在DataFrame中,来自datetimes / Timestamps / DatetimeIndex / datetime64的一列值内部存储在dtype {{的NumPy数组中1}}。

要添加或减去表示秒数的整数列,请将整数转换为datetime64[ns] dtype的NumPy数组。然后,您可以执行NumPy datetime64/timedelta64 arithmetic

timedelta64[s]

产量

import numpy as np
import pandas as pd
np.random.seed(2015)
N = 10
frame = pd.DataFrame({'eventdatetime':pd.date_range('2000-1-1', periods=N, freq='T'), 
                  'seconds': np.random.randint(60, size=N)})
frame.loc[::2, 'seconds'] = np.nan

frame["s_eventdatetime"] = (
    frame["eventdatetime"] - np.array(frame['seconds'].fillna(0), dtype='timedelta64[s]'))

您还可以将 eventdatetime seconds s_eventdatetime 0 2000-01-01 00:00:00 NaN 2000-01-01 00:00:00 1 2000-01-01 00:01:00 12 2000-01-01 00:00:48 2 2000-01-01 00:02:00 NaN 2000-01-01 00:02:00 3 2000-01-01 00:03:00 9 2000-01-01 00:02:51 4 2000-01-01 00:04:00 NaN 2000-01-01 00:04:00 5 2000-01-01 00:05:00 8 2000-01-01 00:04:52 6 2000-01-01 00:06:00 NaN 2000-01-01 00:06:00 7 2000-01-01 00:07:00 26 2000-01-01 00:06:34 8 2000-01-01 00:08:00 NaN 2000-01-01 00:08:00 9 2000-01-01 00:09:00 59 2000-01-01 00:08:01 的NumPy数组添加到Pandas DatetimeIndex:

timedelta64[s]

产量

x = pd.date_range('2000-1-1', periods=N, freq='T')
x - np.array(frame['seconds'], dtype='timedelta64[s]')