猿问

如何在pandas python中获得最接近的除以100的数字

我想根据输入列在熊猫数据框中添加一个新列。新添加的列必须像这样填充。


第一行必须用最接近的除以 100 的数字填充。

从下一行开始,将重复输出,直到其与输入值的差值大于或等于 100。


input       output

11700.15    11700

11695.20    11700

11661.00    11700

11630.40    11700

11666.10    11700

11600.30    11700

11600.00    11600

11555.40    11600

11655.20    11600

11699.00    11600

11701.55    11700

11799.44    11700

11604.65    11700

11600.33    11700

11599.65    11600

在大熊猫中最优雅的方法是什么?


拉风的咖菲猫
浏览 184回答 3
3回答

HUX布斯

无论如何都不优雅,但我想没有办法绕过这个循环(可能是错误的!):vals = df1['input'].valuesanchor = 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:        continuech[0] = 1df['out_check'] = pd.Series(100* np.round((df['input'] * ch)/100)).ffill()输出:       input  output  out_check0   11700.15   11700    11700.01   11695.20   11700    11700.02   11661.00   11700    11700.03   11630.40   11700    11700.04   11666.10   11700    11700.05   11600.30   11700    11700.06   11600.00   11600    11600.07   11555.40   11600    11600.08   11655.20   11600    11600.09   11699.00   11600    11600.010  11701.55   11700    11700.011  11799.44   11700    11700.012  11604.65   11700    11700.013  11600.33   11700    11600.014  11599.65   11600    11600.0我相信最后两个值output必须是 1600。

温温酱

我想出的解决方案: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 给出的。
随时随地看视频慕课网APP

相关分类

Python
我要回答