我在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
答案 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