Как выбрать последние значения из серии pandas, используя timedelta? - PullRequest
2 голосов
/ 24 января 2020

У меня есть pandas серия с временными метками в виде индексов и с плавающей точкой в ​​качестве значений

pd.Series(
    data=[150.0, 151.0, ...],
    index=[
        datetime.datetime(2020, 1, 24, 15, 53, 54, 532325, tzinfo=None, fold=0),
        datetime.datetime(2020, 1, 24, 16, 1, 7, 896288, tzinfo=None, fold=0),
        ...]
)

, что приводит к:

2020-01-24T15:53:54.532325    150.0
2020-01-24T16:01:07.896288    151.0
2020-01-24T16:01:10.862610    152.0
2020-01-24T16:01:13.407573    149.0
2020-01-24T16:33:59.985246    148.0
2020-01-24T16:34:06.411970    150.0

Как выбрать последние значения с соответствующими индексами через timedelta относительно самых последних значений timedelta в секундах ? Например, для данной серии и временной шкалы в 2 секунды я бы ожидал подмножество серии

2020-01-24T16:33:59.985246    148.0
2020-01-24T16:34:06.411970    150.0

Это должно быть эквивалентно тому, что я должен получить с timestamped_intensity['2020-01-24T16:33:59.9852462':'2020-01-24T16:34:06.411970'] через индексацию по времени .

Ответы [ 2 ]

1 голос
/ 24 января 2020

Не приятно, но у меня работает:

timedelta_in_seconds = 2
most_recent_timestamp = timestamped_intensity.sort_index().index[-1]
timestamped_intensity[most_recent_timestamp - datetime.timedelta(seconds=timedelta_in_seconds):most_recent_timestamp]
1 голос
/ 24 января 2020

ОБНОВЛЕНИЕ

по элементам Series.sort_index

s.sort_index().tail(2)

#date
#2020-01-24 16:33:59.985246    148.0
#2020-01-24 16:34:06.411970    150.0
#Name: value, dtype: float64

По секундам

вычисляем разницу во времени в индексе и индексе, когда накопленная сумма и множитель составляют 2

n = 2
s[s.sort_index(ascending = False)
   .index
   .to_series()
   .diff().abs()
   .dt.total_seconds()
   .cumsum()
   .fillna(0)
   .lt(n)]
...