找到数组中的值在Python中开始减少的点

时间:2018-06-09 09:46:01

标签: python arrays csv dataframe max

我有一个数据框数组[time] [Gforce]的值,表示从钟摆运动中收集的数据。

它看起来像这样:

时间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 Value在乞讨和结束时保持相同而不是开始振荡:变得更大直到最大化,而不是变小到最小(等级)。

我需要的是找到“转变”发生的时间,例如:

时间TgF

5.23 0.228

5.237 0.195

5.241 0.194

5.245 0.203

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魔法?

Ps。:这是我关于StackOverflow的第一个问题,希望它布局合理:)

1 个答案:

答案 0 :(得分:0)

可以通过以下方式获得相同的结果:

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)