3 回答
TA贡献1876条经验 获得超6个赞
无论如何都不优雅,但我想没有办法绕过这个循环(可能是错误的!):
vals = df1['input'].values
anchor = vals[0]
ch = np.zeros(len(vals))
ch.fill(np.nan)
for i in range(len(vals)):
if abs(vals[i] - anchor) >= 100:
anchor = vals[i]
ch[i] = 1
else:
continue
ch[0] = 1
df['out_check'] = pd.Series(100* np.round((df['input'] * ch)/100)).ffill()
输出:
input output out_check
0 11700.15 11700 11700.0
1 11695.20 11700 11700.0
2 11661.00 11700 11700.0
3 11630.40 11700 11700.0
4 11666.10 11700 11700.0
5 11600.30 11700 11700.0
6 11600.00 11600 11600.0
7 11555.40 11600 11600.0
8 11655.20 11600 11600.0
9 11699.00 11600 11600.0
10 11701.55 11700 11700.0
11 11799.44 11700 11700.0
12 11604.65 11700 11700.0
13 11600.33 11700 11600.0
14 11599.65 11600 11600.0
我相信最后两个值output必须是 1600。
TA贡献1752条经验 获得超4个赞
我想出的解决方案:
last = df.loc[0, 'input'].round(-2)
for ix in range(len(df)):
inp = df.loc[ix, 'input']
last = inp.round(-2) if abs(inp - last) >= 100 else last
df.loc[ix, 'output'] = last
它产生的输出正是 OP 给出的。
添加回答
举报