Python 根据另一个数据帧的非零条目在数据帧的列上迭代的最快方法?

Python 根据另一个数据帧的非零条目在数据帧的列上迭代的最快方法?,python,pandas,numpy,Python,Pandas,Numpy,我有两个具有相同列键的熊猫数据帧,例如df1、df2。df1的列是时间序列,而df2的条目与索引给出的日期的df1条目的线性组合有关(对于逻辑来说不是很重要) 我想做以下工作:对于df2中位置为[day,“key”]的每个非零输入元素,计算 df1["key"]*df2[day,"key"]+x 其中x是某个预定向量 我想知道最快的方法是什么。我对Python中的矢量化操作不是很熟悉&我从Fortran学到的使用简单循环的本能显然对这里的性能来说是可怕的 我希望尽可能快地完成这项工作:这很可

我有两个具有相同列键的熊猫数据帧,例如df1、df2。df1的列是时间序列,而df2的条目与索引给出的日期的df1条目的线性组合有关(对于逻辑来说不是很重要)

我想做以下工作:对于df2中位置为[day,“key”]的每个非零输入元素,计算

df1["key"]*df2[day,"key"]+x 
其中x是某个预定向量

我想知道最快的方法是什么。我对Python中的矢量化操作不是很熟悉&我从Fortran学到的使用简单循环的本能显然对这里的性能来说是可怕的

我希望尽可能快地完成这项工作:这很可能要运行10^5/10^6次,表大约是1000乘1000,所以简单的循环速度慢得令人无法忍受

    for day in df1.index:

        for key in df2.loc[day].nonzero():

            df1[key]*df2.at[day,key]+x

使用df.columns中键的索引将数据帧转换为numpy数组和索引是否更快?我发现只需使用
df.at[]
vs
df.loc[][]
就可以大大提高速度。引擎盖下面发生了什么?我想这一定是因为获取数据帧的某个片段会导致膨胀和性能问题的一些聪明之处吧?

您尝试过合并吗?您是说合并两个数据帧,然后运行应用程序吗?我认为这将是非常混乱的跟踪指数,因为我想能够考虑的DF2列为矢量,请参阅并提供一个包括样本输入和输出