我需要同时计算两个相互依赖的值。问题是a
和b
取决于a
和b
的先前值。所以我们需要同时计算它们,同时参考循环的最后计算值。到目前为止我所拥有的是:
x = df.x # just a list containing randomly 1 and 0
df['a']=100 # 100 is just the starting value for a and b and shall be then overwritten by the while loop
df['b']=100
i=1
while i<len(df.index):
df.a[i] = x*((df.a.shift(1)*0.45)+(df.b.shift(1)*0.5))+abs(1-x)*df.a.shift(1)
df.b[i] = x*((df.b.shift(1)*0.5)+(df.a.shift(1)*0.59))+abs(1-x)*df.b.shift(1)
i+1
df是一个DataFrame。
目前我收到错误:ValueError: setting an array element with a sequence.
我也知道为什么我会遇到这个问题,请参阅this question。问题是,我该如何解决这个问题?可能有一个比while
循环更有效的解决方案...
答案 0 :(得分:1)
我注意到df.a
和df.b
都是序列。因此,您可以使用map来获取结果。
示例:
l = [1, 2, 3]
set_negative = lambda x: x * -1 # Some function o lammbda that receives a sinble argument
ml = map(set_negative, l) # ml = [-1, -2, -3]
在您的情况下,您可以像这样编写代码:
in_a = lambda _: x*((df.a.shift(1)*0.45)+(df.b.shift(1)*0.5))+abs(1-x)*df.a.shift(1)
in_b = lambda _: x*((df.b.shift(1)*0.5)+(df.a.shift(1)*0.59))+abs(1-x)*df.b.shift(1)
df.a = map(in_a, df.a)
df.b = map(in_b, df.b)
尝试更多的软化解决方案
答案 1 :(得分:0)
基本上首先你说df['a']
是一个int,之后你想迭代df.a
,好像它是一个数组。因此,如果您将df['a']=100
更改为df['a'][0] = 100
,则应该有效。