按列值访问数据框单元格的最快方法?
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_id
和 bk2_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
我有以下数据框:
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_id
和 bk2_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