按列值访问数据框单元格的最快方法?

fastest way to access dataframe cell by colums values?

我有以下数据框:

time bk1_lvl0_id bk2_lvl0_id pr_ss order_upto_level initial_inventory leadtime1 leadtime2 adjusted_leadtime
0   2020    1000    3   16  18  17  3   0.100000    1
1   2020    10043   3   65  78  72  12  0.400000    1
2   2020    1005    3   0   1   1   9   0.300000    1
3   2020    1009    3   325 363 344 21  0.700000    1
4   2020    102 3   0   1   1   7   0.233333    1

我想要一个函数来获取 pr_ss 例如 (bk1_lvl0_id=1000,bk2_lvl0_id=3)。 这是我试过的代码,但它需要时间:

def get_safety_stock(df,bk1,bk2):
##a function that returns the safety stock for any given (bk1,bk2)
for index,row in df.iterrows():
    if (row["bk1_lvl0_id"]==bk1) and (row["bk2_lvl0_id"]==bk2):
        return int(row["pr_ss"])
        break

如果您的数据框没有基于 bk1_lvl0_idbk2_lvl0_id 的重复值,您可以按如下方式创建函数:

def get_safety_stock(df,bk1,bk2):
    return df.loc[df.bk1_lvl0_id.eq(bk1) & df.bk2_lvl0_id.eq(bk2), 'pr_ss'][0]

请注意,它访问系列中的第一个值,如果数据中没有重复项,这应该不是问题。如果你想要所有这些,只需从末尾删除 [0],它应该会给你整个系列。可以这样调用:

get_safety_stock(df, 1000,3)
>>>16