Pandas:如何构建需要先前输出作为输入的行式应用
Pandas: How to structure row-wise apply which requires previous output as input
我必须为每一行计算一些 newValue
。 newValue
是 df.col1, df.col2
中非线性方程的解。我决定按行 df.apply()
来实现它。
但是,我想获取上一行的结果,并将其用作下一行优化的猜测。我对如何设置它一无所知。以下是我的粗略代码草图,如您所见,我不知道如何将 guess
提供给 getFlow()
。
# this function does some computation given a row
def getFlow(row, guess = False):
# define a residual to minimize
def flowResidual(col1, col2):
# here would be some code
return np.abs(doSomeCalculationsAndCreateResidual(col1, col2))
if guess == False:
guess = 0.1
inflowRate = optimize.fmin(flowResidual, guess, args=(row.col1, row.col2))
# I have some dataframe df
df['newValue'] = df.apply(getFlow, axis=1)
您可以使用全局变量来跟踪猜测,但显式循环可能更清晰,如下面的伪代码所示。
ans = np.zeros(len(df))
for i, (col1, col2) in enumerate(df.itertuples(index=False)):
...
if i == 0:
guess = 0.1
else:
guess = ans[i-1]
ans[i] = optimize(...)
df['newValue'] = ans
我必须为每一行计算一些 newValue
。 newValue
是 df.col1, df.col2
中非线性方程的解。我决定按行 df.apply()
来实现它。
但是,我想获取上一行的结果,并将其用作下一行优化的猜测。我对如何设置它一无所知。以下是我的粗略代码草图,如您所见,我不知道如何将 guess
提供给 getFlow()
。
# this function does some computation given a row
def getFlow(row, guess = False):
# define a residual to minimize
def flowResidual(col1, col2):
# here would be some code
return np.abs(doSomeCalculationsAndCreateResidual(col1, col2))
if guess == False:
guess = 0.1
inflowRate = optimize.fmin(flowResidual, guess, args=(row.col1, row.col2))
# I have some dataframe df
df['newValue'] = df.apply(getFlow, axis=1)
您可以使用全局变量来跟踪猜测,但显式循环可能更清晰,如下面的伪代码所示。
ans = np.zeros(len(df))
for i, (col1, col2) in enumerate(df.itertuples(index=False)):
...
if i == 0:
guess = 0.1
else:
guess = ans[i-1]
ans[i] = optimize(...)
df['newValue'] = ans