我想迭代df并计算列需要列b和c值的值。公式如下:
for i in range(1, len(df)):
df.a[i] = df.b[i-1]*(2**df.c[i])
df.b[i] = df.a[i]*0.5 + 1
我希望使用apply func或lambda func进行更快的计算,但我不知道何时在python中定义apply函数,如何访问上一行的值?
示例输入(df.a [0] df.b [0] df.c)和预期输出df.a: DF
a b c
0 1 1
4 3 2
24 13 3
208 105 4
答案 0 :(得分:1)
您需要shift()功能:
In [9]: df = pd.DataFrame({'b': [1,3,13,105], 'c': [1,2,3,4]})
In [10]: df
Out[10]:
b c
0 1 1
1 3 2
2 13 3
3 105 4
In [11]: df['a'] = (df.b.shift()*(2**df.c)).fillna(0)
In [12]: df
Out[12]:
b c a
0 1 1 0
1 3 2 4
2 13 3 24
3 105 4 208
In [13]: df.b = df.a*0.5+1
In [14]: df
Out[14]:
b c a
0 1 1 0
1 3 2 4
2 13 3 24
3 105 4 208
In [15]: df[['a','b','c']]
Out[15]:
a b c
0 0 1 1
1 4 3 2
2 24 13 3
3 208 105 4