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



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

它看起来像这样:

时间 TgF

00.993

1 0.988

2 0.982

3 0.983

......

36882 1.002

36883 1.000

绘制,它看起来像这样:

https://i.stack.imgur.com/kfF4N.png (没有足够的声誉来发布图片?

Gforce 值在乞讨和结束时几乎保持不变,而不是开始振荡:变大直到最大值,而不是变小到最小(有点(。

我需要的是找出"移位"发生在什么时间,例如:

时间 TgF

5.23 0.228

5.237 0.195

5.2410.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的第一个问题,希望它布局得很好:)

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

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)

最新更新