我需要一种方法来矢量化eval语句,该语句循环通过引用数据帧(df_ref(,该引用数据帧具有iloc到源df(df(的字符串
以下是问题的代表:
import pandas as pd
dataValues = ['a','b','c']
df = pd.DataFrame({'values': dataValues})
df_list = ['df.iloc[0,0]','df.iloc[2,0]']
df_ref = pd.DataFrame({'ref':df_list})
#looping 10000 times just to replicate a the amount of times this operation
#may run in a typical scenario
def help():
for i in range(10000):
for index,row in df_ref.iterrows():
eval(df_ref.ref[index])
%timeit help()
输出:
2.84 s ± 366 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
在你做出回应之前。。我的问题总是有一些动态引用,我必须在python中复制这些引用,所以更直接的路由可能无法解决我的特定问题。
谢谢你的帮助!
如前所述,首先提取索引,然后分割成整个内容:
def help1():
indexes = df_ref['ref'].str.extract('iloc[(d+),s*(d+)]').astype(int)
return df.to_numpy()[indexes[0], indexes[1]]
和
help1()
> array(['a', 'c'], dtype=object)
%timeit -n 1000 help1()
> 1.11 ms ± 89.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)