定义python应用函数,它可以访问前面的行值并将它们用于计算

时间:2016-03-14 17:45:30

标签: python function pandas lambda apply

我想迭代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

1 个答案:

答案 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