【发布时间】:2021-12-22 13:57:43
【问题描述】:
我有一个名为“Dataex”的 DataFrame,以及一个名为“steps”的升序列表。
import pandas as pd
import numpy as np
if __name__ == "__main__":
Dataex = [[0.6, 0.36],
[0.6, 0.36],
[0.9, 0.81],
[0.8, 0.64],
[1.0, 1.00],
[1.0, 1.00],
[0.9, 0.81],
[1.2, 1.44],
[1.0, 1.00],
[1.0, 1.00],
[1.2, 1.44],
[1.1, 1.21]]
Dataex = pd.DataFrame(data = Dataex, columns = ['Lx', 'A'])
steps = [0, 0.75, 1, 1.25, 1.5, 1.75 ,2, 2.25, 2.4, 2.5, 2.75, 3,
3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6]
# steps = np.array(steps)
# Dataex["Lx_new"] = steps[np.searchsorted(steps, Dataex["Lx"])]
我正在寻找的是:'Dataex ['Lx']'的每个值都与'steps'中找到的最接近的值进行比较,然后用最接近的限制替换,无论是向左还是向对了,我举几个例子来说明:
示例案例1:Dataex ['Lx'] = 0.8 与'steps'列表相比,它在[0.75 - 1]的区间之间,更接近下限,所以新的值必须是0.75。
示例情况2:Dataex ['Lx'] = 1.2 与列表'steps'相比,在[1 - 1.25]的区间之间,更接近上限,所以新的值必须是1.25 .
示例案例3:Dataex ['Lx'] = 1,这种情况如果我和'steps'比较,列表中有一个等于1的值,所以新的值必须相同,即1.
简而言之,我应该有这样的东西:
Lx A Lx_new
0.6 0.36 0.75
0.6 0.36 0.75
0.9 0.81 1
0.8 0.64 0.75
1 1 1
1 1 1
0.9 0.81 1
1.2 1.44 1.25
1 1 1
1 1 1
1.2 1.44 1.25
1.1 1.21 1
【问题讨论】:
-
有趣。
steps中的数字似乎是一致的四分之一,例如,1、1.25、1.5、1.75、2 等,除了为 2,其中有一个 2.4在中间,数字像往常一样按季度进行。这是故意的吗? -
是的,这是故意的,来自之前的计算@user17242583
标签: python python-3.x pandas numpy