为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2021-09-11 10:36:09
我想根据输入列在熊猫数据框中添加一个新列。新添加的列必须像这样填充。第一行必须用最接近的除以 100 的数字填充。从下一行开始,将重复输出,直到其与输入值的差值大于或等于 100。input       output11700.15    1170011695.20    1170011661.00    1170011630.40    1170011666.10    1170011600.30    1170011600.00    1160011555.40    1160011655.20    1160011699.00    1160011701.55    1170011799.44    1170011604.65    1170011600.33    1170011599.65    11600在大熊猫中最优雅的方法是什么?
查看完整描述

3 回答

?
HUX布斯

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。


查看完整回答
反对 回复 2021-09-11
?
温温酱

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 给出的。


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信