当数据帧与前一个或后一个差异太大时,我想从数据帧中删除值。
df = pd.DataFrame({'Watt':[554, 557, 51, 480, 601, 458, 19, 492, 503, 22, 399]})
例如这里我需要去掉(51,19,22),有点"outliers">
我不想在< x
这样的条件下下降,而是考虑到前一个和下一个值的百分比变化。
下面的命令将产生期望的输出:
df = pd.DataFrame({'Watt':[554, 557, 51, 480, 601, 458, 19, 492, 503, 22, 399]})
df['previous percent'] = df.Watt/df.Watt.shift(1)
df['next percent'] = df.Watt.shift(-1)/df.Watt
threshold_previous = .8
threshold_next = 2
df[(1-df['previous percent'] < threshold_previous) &
(df['next percent']-1 < threshold_next)]
一个稍微优雅一点的解决方案是:
df['average'] = (df.Watt.shift(1) + df.Watt.shift(-1)) / 2
threshold = .8
df[df.Watt/df.average > threshold]
但这取决于你的用例。