2024-04-29 06:59:58 发布
网友
我有一个数据框,在名为“原子”的列中有数字。 我想把每个值四舍五入到一组给定值中最接近的数。 示例:
'设置:5,10,20,25,50,100'
6-->;5、34-->;25、70-->;50
使用abs+min+列表理解
abs
min
s = [5, 10, 20, 25, 50, 100] l = [6, 34, 70] [ k[0] for k in [ min([(i,abs(i-j)) for i in s],key=lambda x:x[1]) for j in l ] ] #Output: #[5, 25, 50]
试试pd.cut
import pandas as pd df = pd.DataFrame({'atomic':[6,34,70]}) bins = [0,5,10,20,25,50,100] labels = bins[:-1] # [0,5,10,20,25,50] df['binned'] = pd.cut(df.atomic, bins, labels=labels) df atomic binned 0 6 5 1 34 25 2 70 50
注意binned是一个“类别”而不是一个数字。如果你需要一个号码,请使用
df['binned'] = pd.cut(df.atomic, bins, labels=labels).astype(int)
我假设你能把你的一组数字列成一个单子
set = [5, 10, 20, 25, 50, 100]
然后可以使用min和key定义舍入函数:
key
def custom_round(set, value): return min(set, key=lambda x:abs(x-value))
如果有许多值需要计算,可以将其与列表理解相结合,例如
values = [1,2,5,6,8,9,10,25,28,99] rounded = [custom_round(set, v) for v in values]
这里发生了什么?
当min与lambda函数组合作为键时,该函数首先应用于数组中的所有元素,然后返回与这个新数组的min对应的原始数组的元素。在上面的示例中,lambda函数查找从目标value到每个可以舍入到的值的绝对距离,因此min返回最接近value的set元素。你知道吗
value
set
使用
abs
+min
+列表理解试试pd.cut
注意binned是一个“类别”而不是一个数字。如果你需要一个号码,请使用
我假设你能把你的一组数字列成一个单子
set = [5, 10, 20, 25, 50, 100]
然后可以使用
min
和key
定义舍入函数:如果有许多值需要计算,可以将其与列表理解相结合,例如
这里发生了什么?
当
min
与lambda函数组合作为键时,该函数首先应用于数组中的所有元素,然后返回与这个新数组的min对应的原始数组的元素。在上面的示例中,lambda函数查找从目标value
到每个可以舍入到的值的绝对距离,因此min
返回最接近value
的set
元素。你知道吗相关问题 更多 >
编程相关推荐