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

2024-10-03 09:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个数据帧数组[time][Gforce],其中的值表示从钟摆运动中收集的数据。你知道吗

它看起来像这样:

时间TgF

0.993个

10.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.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魔法?你知道吗

附言:这是我关于StackOverflow的第一个问题,希望能安排得很好:)


Tags: csv数据httpscomtimepng时间数组
1条回答
网友
1楼 · 发布于 2024-10-03 09:14:35

同样的结果也可以通过以下方式实现:

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)

相关问题 更多 >