我有一個名為“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
uj5u.com熱心網友回復:
這是否完成了您想要做的事情?
steps = np.array(steps)
Dataex["Lx_new"] = Dataex["Lx"].apply(lambda x: steps[np.argmin(np.abs(x-steps))])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355115.html
