我有一個輸入 DataFrame,我想修改它的“Spcx”列之一,為此我定義了一個升序排序串列“Spaces”
import pandas as pd
import numpy as np
if __name__ == "__main__":
Example = [[ 0],
[ 0],
[0.14],
[0.10],
[0.10],
[0.10],
[0.13],
[0.16],
[0.24],
[0.21],
[0.14],
[0.14]]
Example = pd.DataFrame(data = Example, columns = ['Spcx'])
Spaces = [0, 0.100, 0.125, 0.150, 0.175, 0.200, 0.225, 0.250, 0.275, 0.300]
Spaces = np.array(Spaces) # convert to numpy array
Example["Spcx"] = Spaces[np.searchsorted(Spaces, Example["Spcx"], side = 'left')]
我要找的是每個 Example ['Spcx'] 與每個間隔 'Spaces' 進行比較并取左邊的值,例如:
0 - -> 空格 [0 - 0.100] - -> 0
0.10 - -> 空格 [0.100 - 0.125] - -> 0.100
0.14 - -> 空格 [0.125 - 0.150] - -> 0.125
它應該保持這樣:
Spcx
0
0
0.125
0.1
0.1
0.1
0.125
0.15
0.225
0.2
0.125
0.125
uj5u.com熱心網友回復:
一種方法是簡單地使用side='right'并減去 1:
Spaces = np.array(Spaces) # convert to numpy array
Example["Spcx"] = Spaces[np.searchsorted(Spaces, Example["Spcx"], side='right') - 1]
print(Example)
輸出
Spcx
0 0.000
1 0.000
2 0.125
3 0.100
4 0.100
5 0.100
6 0.125
7 0.150
8 0.225
9 0.200
10 0.125
11 0.125
從檔案中np.searchsorted,假設這a是排序陣列,它將回傳:
| 邊 | 回傳索引 i 滿足 |
|---|---|
| 剩下 | a[i-1] < v <= a[i] |
| 對 | a[i-1] <= v < a[i] |
基本上"right"將回傳i,使得i - 1對應于小于或等于一個的最后一個值被搜索。
uj5u.com熱心網友回復:
您可以嘗試pd.cut使用right選項:
Spaces[pd.cut(Example['Spcx'], Spaces, right=False, labels=False)]
輸出:
array([0. , 0. , 0.125, 0.1 , 0.1 , 0.1 , 0.125, 0.15 , 0.225,
0.2 , 0.125, 0.125])
uj5u.com熱心網友回復:
你想要 numpydigitize函式:
import pandas as pd
import numpy as np
if __name__ == "__main__":
Example = [[ 0],
[ 0],
[0.14],
[0.10],
[0.10],
[0.10],
[0.13],
[0.16],
[0.24],
[0.21],
[0.14],
[0.14]]
Example = pd.DataFrame(data = Example, columns = ['Spcx'])
Spaces = [0, 0.100, 0.125, 0.150, 0.175, 0.200, 0.225, 0.250, 0.275, 0.300]
Spaces = np.array(Spaces) # convert to numpy array
Example["Spcx"] = Spaces[np.digitize(Example["Spcx"],Spaces)-1]
print(Example)
輸出:
Spcx
0 0.000
1 0.000
2 0.125
3 0.100
4 0.100
5 0.100
6 0.125
7 0.150
8 0.225
9 0.200
10 0.125
11 0.125
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/338383.html
上一篇:在滑動視窗中應用np.where
