Python 在特定列的dataframe中搜索值
对于输入,如Python 在特定列的dataframe中搜索值,python,pandas,Python,Pandas,对于输入,如name aartinid和ltp 1014 我希望输出为对应于ltp下限的url 在这种情况下 https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/aartinind21jun1020ce/13192450 我正试图写函数来实现这一点,我被困在这里,无法思考应该是什么 将返回正确url的搜索条件 def find_url(name,ltp,df): return(df.iloc[df.index == name, ???) na
name aartinid
和ltp 1014
我希望输出为对应于ltp下限的url
在这种情况下
https://kite.zerodha.com/chart/ext/tvc/NFO-OPT/aartinind21jun1020ce/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
如何获得所需结果?要找到最接近的值,请将
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)
编辑:
>>> 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
ltp
(1014)的下限不应该是1000而不是1020?或者您想要上限或最接近的值。我想要最接近的值获取此错误类型错误:不支持的操作数类型为-:“str”和“int”strike
列的数据类型不是数字?请提供df.info()。请看我答案的第一行。@AkshadPatil。我更新了我的答案。
>>> 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