【问题标题】:Find point where values in array start decreasing in Python在Python中查找数组中的值开始减少的点
【发布时间】:2018-06-09 09:46:00
【问题描述】:

我有一个数据框数组[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 值在开始和结束时几乎保持不变,而不是开始振荡:变大到最大值,而不是变小到最小值(有点)。

我需要的是找出“转变”发生在什么时候,例如:

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

【问题讨论】:

    标签: python arrays csv dataframe max


    【解决方案1】:

    同样的结果可以通过:

    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)
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 2016-05-04
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多