无法向下舍入数据帧中的列值



我有一个DataFrame:

ID      Turn    Bonus
55  4033650 270.00  5.0
17  4034067 298.00  6.0
38  4030923 343.00  7.0
7   4032873 329.25  7.0
22  4031998 343.80  7.0
51  4033497 392.00  8.0
8   4033672 435.20  9.0
18  3546068 448.00  9.0
59  4034004 527.00  11.0
27  4032970 569.30  11.0
23  4032170 584.00  12.0
32  4029310 728.00  15.0
58  4033822 767.80  15.0
31  4033500 872.90  17.0
21  4031524 914.20  18.0
43  4032230 981.70  20.0
16  4033742 1034.10 21.0
12  4031882 1075.80 22.0
15  4031961 1463.40 29.0
26  4032717 1460.25 29.0
46  4032464 1897.75 38.0
14  4029057 1991.40 40.0
30  4033461 2252.90 45.0
60  4034085 2446.00 49.0
49  4033296 3279.60 50.0

我想对Bonus列中的值进行四舍五入
我为获得价值所做的工作:

df['Bonus'] = round((df['Turn']/250)*5)

不幸的是,它没有按照我想要的方式进行,因为我想把它四舍五入。当我尝试使用math.floor()时,我得到了TypeError: cannot convert the series to <class 'float'>

我甚至尝试过使用.astype()df['Bonus']的类型更改为float,但无济于事。

我想打6-9比5,11-14比10,依此类推

伙计们,你们能帮忙吗?

从你的一条评论到问题,看起来你想四舍五入到5的倍数。

这将完成任务:

df.Bonus = (df.Bonus/6).astype(np.int)*5

它将从5到0,从10到5(从你的评论来看,@sygneto I would like to round 6-9 to 5, 11-14 to 10, and so on似乎是你想要的(。

如果你想保持5的倍数不变,只需用5 代替6

df.Bonus = (df.Bonus/5).astype(np.int)*5

尝试:

import numpy as np
df['Bonus'] = np.floor(df['Bonus']).astype(int)

或:

df['Bonus'].apply(lambda x: round(x))
df = pd.DataFrame({'ID':[4033650,4033650,4032717,4032464],
'Turn':[270.0,298.00,1460.25,1897.75]
})
df['Bonus'] = round((df['Turn']/250)*5)

输入df:

ID     Turn  Bonus
0  4033650   270.00    5.0
1  4033650   298.00    6.0
2  4032717  1460.25   29.0
3  4032464  1897.75   38.0

对于这个例子,我们希望区间值为5。要做到这一点,我们想知道在没有休息的情况下,"5"在奖金列中的次数是多少(四舍五入(。

df['Bonus'] = df['Bonus'].apply(lambda x: (x/5))
df:
ID     Turn  Bonus
0  4033650   270.00    1.0
1  4033650   298.00    1.2
2  4032717  1460.25    5.8
3  4032464  1897.75    7.6

然后将舍入函数添加到round(),这些值向下:

df['Bonus'] = df['Bonus'].apply(lambda x: round(x/5))
df:
ID     Turn  Bonus
0  4033650   270.00      1
1  4033650   298.00      1
2  4032717  1460.25      6
3  4032464  1897.75      8

最后将其乘以5以接收我们想要的的结果

df['Bonus'] = df['Bonus'].apply(lambda x: 5*round(x/5))
ID     Turn  Bonus
0  4033650   270.00      5
1  4033650   298.00      5
2  4032717  1460.25     30
3  4032464  1897.75     40

最新更新