Разбейте ряды на сегменты больше порога и примените статистику к сегментам - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть серия x со значениями y и z.Я хотел бы получить коллекцию сегментов x, в течение которых y больше 0.5.По этому сегменту я хотел бы вычислить две статистики: длину сегмента в единицах x и среднее значение z по сегменту.Я хочу отбросить все данные, для которых y равно 0,5 или менее.Какой самый элегантный способ сделать это с пандами?

import numpy as np
import pandas as pd

x = np.arange(0, 100, 0.1)
y = np.sin(x) + 0.5*np.sin(0.5*x)
z = np.random.rand(x.size)

df = pd.DataFrame(data=np.stack((x,y), axis=-1), index=x, columns=['y','z'])

# Fetch all x segments for which y is larger than 0.5. Discard others.
# Calculate segment length in units of x.
# Compute mean of z per segment.

1 Ответ

0 голосов
/ 11 сентября 2018

Выберите значения:

df = df[df['y'] > 0.5]

Найдите новые сегменты:

df['is_new_segment'] = df.reset_index()['index'].diff() > 0.15

Числовые сегменты:

df['segment'] = df['is_new_segment'].cumsum()

Группируйте по сегментам и применяйте свою функцию (здесь mean например):

df.groupby('segment')['z'].mean()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...