我有一些在python中工作的数据。当我绘制数据时,我想进行平滑过渡。有谁知道我该怎么做?有关更多信息,请参见我的数据图。注意在-250,0.33处的急剧变化,这就是我想要平滑的变化;理想情况下会产生一个红色显示的过渡。
您可以通过平均某个窗口上的值来平滑结果。
一些伪代码:
data = ... # initial data
win = 10 # number of points to take average from
res = [] # result
for i in range(len(data) - win):
s = sum(data[i:i+win])
mean = s / win
res.append(s)
对于熊猫,有rolling function。
import pandas as pd
df = pd.DataFrame({'row': [1, 1, 1, 1, 1, 10, 10, 10, 10, 5, 5, 5, 5, 5]})
df.rolling(window=3).row.mean()
将返回:
0 NaN
1 NaN
2 1.000000
3 1.000000
4 1.000000
5 4.000000
6 7.000000
7 10.000000
8 10.000000
9 8.333333
10 6.666667
11 5.000000
12 5.000000
13 5.000000
Name: row, dtype: float64
如果需要更改特定片段,请使用此:
a = 3 # start of fragment
b = 7 # end of fragment
m = 1
df.row.loc[a:b-m] = df[a:b].rolling(window=3, min_periods=m).row.mean()