Найти точку, где значения в массиве начинают уменьшаться в Python - PullRequest
0 голосов
/ 09 июня 2018

У меня есть массив фреймов данных [time] [Gforce] значений, которые представляют данные, собранные от движения маятника.

Это выглядит примерно так:

time TgF

0 0,993

1 0,988

2 0,982

3 0,983

......

36882 1.002

36883 1.000

На графике это выглядит примерно так:

https://i.imgur.com/nyvqBjx.png (недостаточно репутации для публикации изображения?)

Значение Gforce остается практически одинаковым в начале и в конце, чем оно начинает колебаться: увеличиваться до максимума, а не уменьшаться до минимума (вроде).

Что мне нужно, так это найтираз происходит «смещение», например:

время TgF

5,23 0,228

5,237 0,195

5,241 0,194

5,245 0,20

5,251 0,238

Я мог бы использовать цикл, и это было бы легко реализовать, например:

p1 = pandas.read_csv('Pendulo 1.csv', sep=',')
for i in range(1070, p1.TgF.size):
    if(p1.TgF[i] > p1.TgF[i+1] and p1.TgF[i+1] < p1.TgF[i+2]):
        print(p1.time[i+1])
        break

Но я чувствуюэто было бы слишком медленно для тКоличество данных у меня есть (36884 точки данных).Есть ли лучший способ использовать некоторые Python Wizardry?

Ps .: Это мой первый вопрос о StackOverflow, надеюсь, он был хорошо продуман:)

1 Ответ

0 голосов
/ 09 июня 2018

Тот же результат может быть достигнут с:

p1["shift_f"] = p1["TgF"].shift(1).bfill()
p1["shift_b"] = p1["TgF"].shift(-1).ffill()

oscillating_ix = p1["TgF"] < p1[["shift_b", "shift_f"]].min(1)

p1.loc[oscillating_ix].drop(["shift_b", "shift_f"], axis=1)
...