我有一个数据框和一个最大值:
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'中生成值的实际函数更复杂,但这将是一个很好的起点。
答案 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