我应该使用什么函数将数据框的列舍入为数字?

时间:2019-05-20 08:10:18

标签: python pandas

我在pandas数据框中有一个列,我想将所有低于15,000的数字取整为15,000或0。

我想对200,000以上的数字进行同样的处理,然后将其四舍五入为200,000。

对于取整,.round()将其取为多个有效数字 和math.ceil()/。floor()会将数字取到最接近的整数,但它们都不能单独解决我的问题。

我认为有一些聪明的数学技巧或一个我没有看到的函数。

示例:

Column_to_Round    Rounded_Column
11000              15000
9000               15000
3000               0
5000               0
16000              16000
220000             200000
199000             199000

2 个答案:

答案 0 :(得分:3)

编写一个函数并使用apply函数:

 for x in range(df2.shape[0]):
     from_date = df2['from_date'][x]
     to_date = df2['to_date'][x]
     product_v = tank_data['product_ms'][x]
     tank_status_v = tank_data['update'][x]

     df1['prodcode_ms'] = [product_v if from_date <= t_time < to_date else s for t_time,s in 
          zip(df1['start_date'],df2['product_ms'])]
     df1['update'] = [tank_status_v if 
         from_date <= t_time < to_date else s for t_time,s in zip(df1['start_date'],df2['update'])]

答案 1 :(得分:2)

numpy.select用于矢量化解决方案:

a = 15000
b = 200000
m1 = df['Column_to_Round'] < a / 2
m2 = df['Column_to_Round'] < a
m3 = df['Column_to_Round'] > b
df['new'] = np.select([m1, m2, m3],[0, 15000, 200000], default=df['Column_to_Round'])
print (df)
   Column_to_Round  Rounded_Column     new
0            11000           15000   15000
1             9000           15000   15000
2             3000               0       0
3             5000               0       0
4            16000           16000   16000
5           220000          200000  200000
6           199000          199000  199000