我已经有了一个数据帧,我需要在每个索引上对所有前面的索引进行计算(因此对于187个指标,有17766个计算)。这需要高效,以扩展到数百万计算。
#this is the original dataframe
df = pd.DataFrame(np.random.rand(187,2))
#this is the dataframe to write to
df2 = pd.DataFrame()
#blank list to write to
ind_diff = []
方法1:列表
for n in range(0, len(df)):
for i in range(n + 1, len(df)):
ind_diff.append(df.index[i] - df.index[n])
方法2:Dataframe追加
for n in range(0, len(df)):
for i in range(n + 1, len(df)):
df2 = df2.append(df.Index[i] - df.Index[n])
方法#1仅返回最终计算作为输出,即长度为1的列表。为什么?
方法#2有效,但速度太慢。我知道这不是建议创建数据框的方法(根据文档而pd.concat
更有效率)但我正在寻找最快的方法。提前致谢
答案 0 :(得分:4)
让我们尝试广播阵列算法:
[Route("users/verifyLoginCredentials/{username}/{password}")]
这非常快,但是很快就会失去记录(〜数百万),因为它会导致内存井喷,一半的计算是冗余的(因为对称性)