对于name AARTIIND
和ltp 1014
等输入
我希望输出为 url
对应于 ltp 的下限,
在这种情况下
https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1020CE/13192450
我正在尝试编写函数来做到这一点,我被困在这里,无法思考应该是什么 将返回正确 url 的搜索条件
def find_url(name,ltp,df):
return(df.iloc[df.index == name, ???)
name strike url
AARTIIND 1000 https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1000CE/13190658
AARTIIND 1020 https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1020CE/13192450
AARTIIND 1040 https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1040CE/13201410
AARTIIND 1060 https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1060CE/13202434
我怎样才能得到所需的结果?
答案 0 :(得分:1)
要找到最接近的值,将 ltp
减去 strike
并计算绝对值。最低值最接近。
试试这个:
def find_url(name, ltp, df):
df1 = df.loc[df["name"] == name]
return df1.loc[df1["strike"].sub(ltp).abs().idxmin(), "url"]
url = find_url("AARTIIND", 1014, df)
>>> url
'https: // kite.zerodha.com/chart/ext/tvc/NFO-OPT/AARTIIND21JUN1020CE/13192450'
编辑:
>>> pd.DataFrame({'df["strike"]': df["strike"],
".sub(ltp)": df["strike"].sub(ltp),
".abs()": df["strike"].sub(ltp).abs()})
df["strike"] .sub(ltp) .abs()
0 1000 -14 14
1 1020 6 6 # idxmin() return 1 (6 == the lowest value)
2 1040 26 26
3 1060 46 46