我有两个具有相同列键的熊猫数据帧,例如df1,df2。 df1的列是时间序列,而df2的条目与索引给定的当天df1的条目的线性组合有关(对于逻辑而言并不重要)。
我想执行以下操作:对于df2中每个位置为例如[day,“ key”]的非零输入元素,计算
df1["key"]*df2[day,"key"]+x
其中x是一些预定向量。
我想知道最快的方法是什么。我对Python中的矢量化操作不是很熟悉,我从Fortran那里使用简单循环的本能显然对这里的性能太可怕了。
我想尽可能快地执行此操作:这很可能会运行10 ^ 5/10 ^ 6次,并且表的大小大约为1000 x 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[]
与df.loc[][]
发现了巨大的加速。这到底是怎么回事?我认为获取数据帧片段会导致膨胀和性能问题一定是一些技巧吗?