简体   繁体   中英

Python Pandas - Get the First Value that Meets Criteria

We have this function:

def GetPricePerCustomAmt(CustomAmt):
    data = [{"Price":281.48,"USDamt":104.84},{"Price":281.44,"USDamt":5140.77},{"Price":281.42,"USDamt":10072.24},{"Price":281.39,"USDamt":15773.83},{"Price":281.33,"USDamt":19314.54},{"Price":281.27,"USDamt":22255.55},{"Price":281.2,"USDamt":23427.64},{"Price":281.13,"USDamt":23708.77},{"Price":281.1,"USDamt":23738.77},{"Price":281.08,"USDamt":24019.88},{"Price":281.01,"USDamt":25986.95},{"Price":281.0,"USDamt":26127.45}]
    df = pd.DataFrame(data)
    df["getfirst"] = np.where(df["USDamt"] > CustomAmt, 1, 0)
    wantedprice = "??"
    print(df)
    print()
    print("Wanted Price:",wantedprice)
    return wantedprice

Calling it using a custom USDamt like this:

GetPricePerCustomAmt(500)

gets this result:

     Price    USDamt  getfirst
0   281.48    104.84         0
1   281.44   5140.77         1
2   281.42  10072.24         1
3   281.39  15773.83         1
4   281.33  19314.54         1
5   281.27  22255.55         1
6   281.20  23427.64         1
7   281.13  23708.77         1
8   281.10  23738.77         1
9   281.08  24019.88         1
10  281.01  25986.95         1
11  281.00  26127.45         1

Wanted Price: ??

We want to return the Price row of the first 1 appearing in the "getfirst" column.

Examples:

GetPricePerCustomAmt(500)
Wanted Price: 281.44

GetPricePerCustomAmt(15000)
Wanted Price: 281.39

GetPricePerCustomAmt(24000)
Wanted Price: 281.08

How do we do it?

(If you know a more efficient way to get the wanted price please do tell too)

Use next with iter for return default value if no value matched and is returneded empty Series , for filtering use boolean indexing :

def GetPricePerCustomAmt(CustomAmt):
    data = [{"Price":281.48,"USDamt":104.84},{"Price":281.44,"USDamt":5140.77},{"Price":281.42,"USDamt":10072.24},{"Price":281.39,"USDamt":15773.83},{"Price":281.33,"USDamt":19314.54},{"Price":281.27,"USDamt":22255.55},{"Price":281.2,"USDamt":23427.64},{"Price":281.13,"USDamt":23708.77},{"Price":281.1,"USDamt":23738.77},{"Price":281.08,"USDamt":24019.88},{"Price":281.01,"USDamt":25986.95},{"Price":281.0,"USDamt":26127.45}]
    df = pd.DataFrame(data)
    return next(iter(df.loc[df["USDamt"] > CustomAmt, 'Price']), 'no matched')


print(GetPricePerCustomAmt(500))
281.44
print(GetPricePerCustomAmt(15000))
281.39
print(GetPricePerCustomAmt(24000))
281.08
print(GetPricePerCustomAmt(100000))
no matched

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM