在特定列的熊猫数据框中搜索值

时间:2021-06-10 06:04:07

标签: python pandas

对于name AARTIINDltp 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

我怎样才能得到所需的结果?

1 个答案:

答案 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