Pandas行函数行迭代

时间:2015-10-29 21:23:39

标签: python pandas

我有一个数据框和一个最大值:

max_factor = 20
df = pd.DataFrame({'a':[1,1,1,2,2,2,3,3,3,3],'b':np.random.randn(10)})
df
   a         b
0  1 -0.424957
1  1  1.893320
2  1  0.187929
3  2 -1.413340
4  2  1.737371
5  2  0.959317
6  3 -0.554445
7  3  0.100595
8  3 -0.176009
9  3  0.430475

我想创建另一个专栏' c'并使用依赖于' a'' b'和' c'。

例如:

if value(a) == 1 or value(a) == 2:
    value(c) = 0
else:
    value(c) = value(b)/max_factor + value(c-1) 

我尝试了多种方法来做到这一点,但我正在努力。我是否必须遍历每一行或者是否有更快的方法来执行此操作?

编辑:在列' c'中生成值的实际函数更复杂,但这将是一个很好的起点。

1 个答案:

答案 0 :(得分:3)

如果您在此示例之外还有多个条件,则可以使用apply

def foo(row):
    if row['a'] == 1 or row['a'] == 2:
        global v
        v = 0
    else:
        v_old = v
        v = row['b']/20+v_old

    return v

df['c'] = df.apply(foo,axis=1)

   a         b         c
0  1  0.858951  0.000000
1  1  0.588102  0.000000
2  1  1.452569  0.000000
3  2  1.400972  0.000000
4  2 -0.921342  0.000000
5  2 -1.117748  0.000000
6  3  0.792742  0.039637
7  3  0.254630  0.052369
8  3  0.351391  0.069938
9  3  1.822267  0.161052