I am looking for a way to automatically find a starting point of rising in my signal in Python. The data are collected with the frequency 10k (0.0001 s each) so the differences between each point are very small, lost in the noise. I found this point (black dot) manually using data analysis software before but I have multiple files and the manual process is not gonna work well. I was trying to think of something to do with derivative (red dots) or rolling variance (green dots) but it's a dead end for me now. Here's how manual point was chosen: [![enter image description here][1]][1] and now I wanted to find it using python. The full signal looks like this: [![enter image description here][2]][2] The derivative: [![enter image description here][3]][3] The rolling variance: [![enter image description here][4]][4] So they're all close to the interest point (black dot) but I don't know what to do with them next. If I change the limits it all looks like this: [![enter image description here][5]][5] [![enter image description here][6]][6] [![enter image description here][7]][7] **Any ideas how to solve my problem?** The simple code sample is below (plotting excluded) import numpy as np import matplotlib.pyplot as plt import pandas as pd from scipy.optimize import curve_fit import scipy.signal as sig #reading dataset signal = pd.read_csv('dataset.txt', delimiter=' ' ) signal.columns = ['time','current'] #calculating derivative, finding max and min indices of derivative signal_derivative = np.gradient(signal,axis=0) signal['derivative'] = pd.DataFrame(signal_derivative[:,1]) index_derivative_max = signal['derivative'].index[signal['derivative'] == signal['derivative'].max()] index_derivative_min = signal['derivative'].index[signal['derivative'] == signal['derivative'].min()] #calculating rolling variance, range 50 points, finding indices of peaks signal['rolling_var'] = signal['current'].rolling(window=50,center=False).std() index_rolling_max = signal['rolling_var'].index[signal['rolling_var'] == signal['rolling_var'].max()] index_rolling_2nd_max = signal['rolling_var'].index[signal['rolling_var'] == signal['rolling_var'][:100000].max()] [1]: https://i.sstatic.net/mapsn.png [2]: https://i.sstatic.net/p84tr.png [3]: https://i.sstatic.net/KHaXg.png [4]: https://i.sstatic.net/yacbH.png [5]: https://i.sstatic.net/NPaeT.png [6]: https://i.sstatic.net/PoOyr.png [7]: https://i.sstatic.net/bQRE7.png