将Python数据帧值舍入到给定的一组数字中

2024-04-29 06:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,在名为“原子”的列中有数字。 我想把每个值四舍五入到一组给定值中最接近的数。 示例:

'设置:5,10,20,25,50,100'

6-->;5、34-->;25、70-->;50


Tags: 数据gt示例数字原子
3条回答

使用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]

然后可以使用minkey定义舍入函数:

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返回最接近valueset元素。你知道吗

相关问题 更多 >