Python Pandas-获得符合标准的第一个价值

时间:2018-08-31 12:30:51

标签: python pandas

我们具有此功能:

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

使用这样的自定义USDamt调用它:

GetPricePerCustomAmt(500)

获得此结果:

     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: ??

我们要返回“ getfirst”列中出现的前1个价格行。

示例:

GetPricePerCustomAmt(500)
Wanted Price: 281.44

GetPricePerCustomAmt(15000)
Wanted Price: 281.39

GetPricePerCustomAmt(24000)
Wanted Price: 281.08

我们如何做到?

(如果您知道获取要价的更有效方法,也请务必告知)

1 个答案:

答案 0 :(得分:2)

如果没有匹配的值,则将nextiter一起使用来返回默认值,并返回空的Series,用于过滤,使用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