我有以下数据:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.hide(WindowInsets.Type.statusBars())
}
else {
@Suppress("DEPRECATION")
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
我试图通过查找至少为-80的数据来查找所有局部最小值,并继续提供较低的值,直到提供较高的值为止。
例如:如果值是-80,-82,-83,-90,-89。在此示例中,-90是最低值,因为-89高于-90。
我尝试了这个,但是出现错误:
Date
2020-07-20 -98.109956
2020-07-21 -94.408946
2020-07-22 -76.788330
2020-07-23 -71.094908
2020-07-24 -92.262792
2020-07-27 -97.932848
2020-07-28 -90.236719
2020-07-29 -96.301774
2020-07-30 -94.293501
2020-07-31 -98.110483
2020-08-03 -99.121514
2020-08-04 -73.715980
2020-08-05 -67.069465
2020-08-06 -57.401802
2020-08-07 -53.323235
2020-08-10 -50.000000
2020-08-11 -24.169180
2020-08-12 -10.286685
2020-08-13 -6.745360
2020-08-14 -19.178088
2020-08-17 -2.475911
2020-08-18 -11.586069
2020-08-19 -4.896705
2020-08-20 -10.435387
2020-08-21 -20.938373
2020-08-24 -8.269516
2020-08-25 -11.557382
2020-08-26 -2.938893
2020-08-27 -10.296292
2020-08-28 -7.050787
2020-08-31 -24.016059
2020-09-01 -27.694853
2020-09-02 -4.538226
2020-09-03 -8.166541
2020-09-04 -8.243151
2020-09-07 -3.356906
2020-09-08 -32.970033
2020-09-09 -11.716626
2020-09-10 -16.220030
2020-09-11 -33.078070
2020-09-14 -38.897395
2020-09-15 -35.068910
2020-09-16 -39.969342
2020-09-17 -23.889707
2020-09-18 -26.339946
2020-09-21 -68.164790
2020-09-22 -89.451473
2020-09-23 -72.038817
2020-09-24 -74.854345
2020-09-25 -61.359206
Name: CHAMTEMP, dtype: float64
我该如何解决此错误?
答案 0 :(得分:2)
您首先可以找到所有向下的运行,并获得该运行的终点。假设您的数据在文件filename.csv
中。
import pandas as pd
import numpy as np
df = pd.read_csv('filename.csv', sep='\s+', parse_dates=True)
down = df.Date.diff().values < 0
df['test'] = np.r_[down[1:] != down[:-1], False] & down
在parse_dates=True
中用pd.read_csv
绘制数据会产生更好的图
import matplotlib.pyplot as plt
plt.figure(figsize=(14,5))
plt.plot(df.Date)
plt.plot(df.Date[df.test], 'o');
要查找所有局部最小值<-80,可以添加此条件
plt.figure(figsize=(14,5))
plt.plot(df.Date)
plt.plot(df.Date[(df.test) & (df.Date < -80)], 'o');
答案 1 :(得分:2)
假设df
是数据帧,data
是列名:
import numpy as np
from scipy.signal import argrelextrema
df["lmin"] = False
df.iloc[argrelextrema(df["data"].to_numpy(), np.less)[0], list(df.columns).index("lmin")] = True
答案 2 :(得分:2)
如果我理解正确,则局部最小值是两个值均小于其上一个和下一个值的地方。因此,条件是
(data < data.shift(1)) & (data < data.shift(-1))
添加小于-80
的条件,条件变为
conds = (data < -80) & (data < data.shift(1)) & (data < data.shift(-1))
使用此条件进行切片
data_minima = data[conds]
Out[29]:
2020-07-27 -97.932848
2020-07-29 -96.301774
2020-08-03 -99.121514
2020-09-22 -89.451473
Name: 1, dtype: float64
答案 3 :(得分:1)
尝试将创建一个新列,如果这是本地最小值,则该列为True:
import numpy as np
minimum = -80
df['local_min'] = np.where(((df['data'] < minimum) & (df['data'] < df['data'].shift(-1)) & (df['data'] > df['data'].shift(1)), True, False)