У меня есть фрейм данных pandas, скриншот показан ниже:
ID Price
100 1040.0
101 1025.0
102 750.0
103 891.0
104 924.0
Ожидаемый результат показан ниже
ID Price Price_new
100 1040.0 1050
101 1025.0 1050
102 750.0 750
103 891.0 900
104 920.0 900
Это то, что я сделал, но это не то, что я хочу. Я хочу округлить до ближайших пятидесяти таким образом, чтобы при 1025 оно должно округляться до 1050.
df['Price_new'] = (df['Price'] / 50).round().astype(int) * 50
Это связано с проблемой: раунд с питоном 3
s = (df['Price'] % 50)
df['new'] = df['Price'] + np.where(s>=25,50-s,-s)
df
Out[33]:
ID Price new
0 100 1040 1050
1 101 1025 1050
2 102 750 750
3 103 891 900
4 104 924 900
Следуйте моему предложению:
import pandas as pd
dt = pd.DataFrame({'ID':[100,101,102,103,104], 'Price':
[1040,1025,750,891,924]})
#VERSION1
dt['Price_new'] = round((dt['Price']+1)/50).astype(int)*50
#VERSION2
dt['Price_new_v2'] = dt['Price']-(dt['Price'].map(lambda x: x%50)) +
(dt['Price'].map(lambda x: round((((x%50)+1)/50))))*50
ID Price Price_new Price_new_V2
0 100 1040 1050 1050
1 101 1025 1050 1050
2 102 750 750 750
3 103 891 900 900
4 104 924 900 900
Просто плюс 1 в вашей математике вы сможете найти правильный ответ. Но есть и другой способ сделать это, мой opnião более понятен, чем второй вариант, хотя я использовал оператор по модулю.
спасибо @Артур