Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2)

加入好友
加入社群
Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

假設我的資料如下:

Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

我想要取出

y=-10 -20 -30(target)的x座標

該如何做?

請注意y=-30時

會遇到sidelobes

直接取跟target最接近index

將會誤抓到sidelobes的x座標

從-30開始講

folder=r”C:\Python”
fname = “serMean.xlsx”

import os
import pandas as pd

fpath = os.path.join(folder,fname)
dfMean = pd.read_excel(fpath)

serMean = dfMean [dfMean.columns[1]]
serMean.index= dfMean [dfMean.columns[0]]

target_value = -30
targetIdx = (serMean-target_value).abs().nsmallest(10).index.tolist()
#[129, -87, -21, 28, -83, -86, 121, 164, 54, -22]
#絕對值超過50的index鐵定是 sidelobes 對應的x座標
#想要的index不出-21 -22 28

idxmax = serMean.idxmax() #4
targetIdx_L = [i for i in targetIdx if i-idxmax < 0]
#[-87, -21, -83, -86, -22]
targetIdx_R = [i for i in targetIdx if i-idxmax >= 0]
#[129, 28, 121, 164, 54]
targetIdx_L.sort() #[-87, -86, -83, -22, -21]
targetIdx_R.sort() #[28, 54, 121, 129, 164]
targetIdx=[ targetIdx_L[-1],targetIdx_R[0] ]
#[-21, 28]

Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

推薦hahow線上學習python: https://igrape.net/30afN

後續要找target = -20的index

直接取兩個誤差絕對值最小的2個index

怕會取到同一邊的index

所以依據target = -30的index

當成threshold,先切掉sidelobes

再將資料切片為

左半邊跟右半邊處理

threshold=targetIdx

target_value = -20
threL = threshold[0] #-21
threR = threshold[1] #28
serMeanSlice2 = serMean.loc[threL:threR]
#不要漏了.loc 使用標籤索引
# 沒有 .loc 或 .iloc 使用位置索引

#index=-180~180(角度)跟0,1,2,3…(位置索引)

#同為數字時,特別容易混淆

#怕直接取最小值的話,取到同一邊的index
#以下拆分為L R
serMeanSceL = serMeanSlice2.loc[threL:idxmax]
serMeanSceR = serMeanSlice2.loc[idxmax:threR]
#要由小到大,不然會切到空Series
#使用 loc,則右邊的範圍是包含 threR 的
# iloc則不包含最後一個
lisL = (serMeanSceL-target_value).abs().nsmallest(1).index.tolist() #[-13]
lisR = (serMeanSceR-target_value).abs().nsmallest(1).index.tolist() #[20]
“””
excel資料:
-13 -20.27074
-12 -19.37326

20 -19.54602
21 -20.77232
“””
targetIdx = [lisL[0],lisR[0]]
#[-13, 20]

Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

 

取最接近idxmax的那一個idx,存在邏輯上的bug
正確邏輯應該是取最接近idxmax的那一”群”idx
從這一群中,再做一次誤差絕對值最小的那一個idx

片段程式碼如下:

Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

推薦hahow線上學習python: https://igrape.net/30afN

 

加入好友
加入社群
Python 如何用pandas.Series.nsmallest() 找到n個與target差距最小的index?再從中找到距離idxmax最近的index?避免誤抓sidelobes的index? targetIdx = (serMean-target_value).abs().nsmallest(n).index.tolist() ;Series切片: .loc[標籤名1:標籤名2] (會含標籤名2) ; .iloc[位置1:位置2] (不含位置2) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *