3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個贊
無論如何都不優(yōu)雅,但我想沒有辦法繞過這個循環(huán)(可能是錯誤的?。?/p>
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貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超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
它產(chǎn)生的輸出正是 OP 給出的。
添加回答
舉報