我見過 :
如何在 Pandas 系列中找到與輸入數字最接近的值?
我有一個像這樣的熊貓資料框:
編號 | col1 | col2 |
---|---|---|
1 | 2 | 56 |
2 | 3 | 22 |
3 | 6 | 12 |
4 | 7 | 7 |
5 | 7.5 | 6 |
6 | 9 | 9 |
7 | 10.1 | 11 |
8 | 11 | 23 |
和這樣的輸入串列:
[ 4, 7.6, 10]
我想保持與串列長度相同的行數,其中 df['col1'] 中的元素最接近串列中的元素,因此 y 輸出 DataFrame 為:
編號 | col1 | col2 |
---|---|---|
2 | 3 | 22 |
5 | 7.5 | 6 |
7 | 10.1 | 11 |
當資料框和串列變大時,什么是有效的解決方案?
uj5u.com熱心網友回復:
第一種方法是減法,但您是否考慮過在您提到的主題中使用磁區的解決方案?
uj5u.com熱心網友回復:
您可以broadcasting
在 numpy 中使用來獲取差異,然后獲取包含最小絕對值的索引
a = np.array([4,7.6,10]).reshape(1,-1) #np.array([[4,7.6,10]])
df.iloc[abs(df.col1.to_numpy()[:,None] - a).argmin(0)]
idx col1 col2
1 2 3.0 22
4 5 7.5 6
6 7 10.1 11
uj5u.com熱心網友回復:
用于merge_asof
匹配排序資料:
pd.merge_asof(pd.DataFrame({'key':inpt}), df,
right_on='col1', left_on='key',
direction='nearest')
輸出:
key idx col1 col2
0 4.0 2 3.0 22
1 7.6 5 7.5 6
2 10.0 7 10.1 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489000.html