Для этого требуется 0.15.0 для функциональной функции Timedelta. Это будет иметь полную точность ваших дат.
In [19]: s
Out[19]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01 00:00:00, ..., 2014-01-02 12:00:00]
Length: 4, Freq: 12H, Timezone: None
In [21]: s-s[0]
Out[21]:
<class 'pandas.tseries.tdi.TimedeltaIndex'>
['0 days 00:00:00', ..., '1 days 12:00:00']
Length: 4, Freq: None
In [22]: ((s-s[0])/pd.Timedelta(1.0,unit='D')) + 1
Out[22]: Float64Index([1.0, 1.5, 2.0, 2.5], dtype='float64')
Деление на TimedeltaIndex с помощью Timedelta дает вам (флоат) фракции. Даты основаны на 0, поэтому мы добавляем обратно 1.
Вышеупомянутый «предполагает», что все даты указаны в том же году. Вот более надежный способ сделать это (вычитание datetimeindex в настоящее время не поддерживается напрямую)
In [53]: pd.TimedeltaIndex(s.asi8-s.to_period('A').to_timestamp().asi8)
Out[53]:
<class 'pandas.tseries.tdi.TimedeltaIndex'>
['0 days 00:00:00', ..., '1 days 12:00:00']
Length: 4, Freq: None
Отлично работает, спасибо большое. Однако я не совсем уверен, что делать со вторым блоком кода. Это заменяет часть 's-s [0]'? –
да, если хотите – Jeff