我即将编写一个回测工具,因此对于每一行我都希望能够访问所有数据帧,直到给定的行。在下面的示例中,我使用循环从固定索引执行此操作。我想知道是否有更好的解决方案。
import numpy as np
import pandas as pd
N
df = pd.DataFrame({"a":np.arange(N)})
for i in range(3,N):
print(df["a"][:i].values)
更新(玩具示例) 我需要将自定义函数应用于所有以前的值。这里作为玩具示例,我将使用所有先前值的平方和。
def toyFun(v):
return np.sum(v**2)
res = np.empty(N)
res[:] = np.nan
for i in range(3, N):
res[i] = toyFun(df["a"][:i].values)
df["res"] = res
答案 0 :(得分:0)
如果要为特定列索引“a”的行,则可以使用.iloc
索引器(我代表索引,loc表示位置)来索引列。
df = pd.DataFrame({'a': [1,2,3,4]})
print(df.a.iloc[:2]) # get first two values
所以,你可以这样做:
for i in range(3, 10):
print(df.a.iloc[:i])
答案 1 :(得分:-1)
最好的方法是使用带有直接结果的临时列,这样就不会重新计算所有内容。
df [" a"]。apply(lambda x:x ** 2).cumsum()
然后重新索引你: res [3:] = df [" a"]。apply(lambda x:x ** 2).cumsum()[2:N-1] .values
或直接到数据框。