Python 带条件语句的函数,用于

Python 带条件语句的函数,用于,python,pandas,Python,Pandas,这是一个非常简单的问题,然而,我在这里找不到类似问题的答案。我有熊猫数据框,我想对列中的每个元素应用一个函数。所以我在做最简单的构造: def PolyNO(x): if x >= 0: x=-0.0001086*x**3 + 0.002878*x**2 + 0.9834*x + 0.2068 else: x=-0.0008852*x**3 - 0.01401*x**2 + 0.9585*x + 0.08614 return x for k in range(len(DA

这是一个非常简单的问题,然而,我在这里找不到类似问题的答案。我有熊猫数据框,我想对列中的每个元素应用一个函数。所以我在做最简单的构造:

def PolyNO(x):
if x >= 0:
    x=-0.0001086*x**3 + 0.002878*x**2 + 0.9834*x + 0.2068
else:
    x=-0.0008852*x**3 - 0.01401*x**2 + 0.9585*x + 0.08614
return x

for k in range(len(DATValues[i])):
    DATValues[k].ix[:,2]=PolyNO(DATValues[k].ix[:,2])
该计划给出了一个答案:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
使用上述所有命题都不起作用。捕获物在哪里?

我想你可以使用:

如果需要覆盖
3.
列:

x = DATValues.ix[:,2]

DATValues.ix[:,2] = (np.where(x >= 0, 
                   -0.0001086*x**3 + 0.002878*x**2 + 0.9834*x + 0.2068,
                   -0.0008852*x**3 - 0.01401*x**2 + 0.9585*x + 0.08614))

print (DATValues)            
        a  b         c
0  201603  A  5.182175
1  201503  A  6.187350
2  201403  A  2.184243
3  201303  A  7.194372
4  201603  B  4.179498
5  201503  B  7.194372
6  201403  B  8.202589
7  201303  B  9.211349 
x = DATValues.ix[:,2]

DATValues.ix[:,2] = (np.where(x >= 0, 
                   -0.0001086*x**3 + 0.002878*x**2 + 0.9834*x + 0.2068,
                   -0.0008852*x**3 - 0.01401*x**2 + 0.9585*x + 0.08614))

print (DATValues)            
        a  b         c
0  201603  A  5.182175
1  201503  A  6.187350
2  201403  A  2.184243
3  201303  A  7.194372
4  201603  B  4.179498
5  201503  B  7.194372
6  201403  B  8.202589
7  201303  B  9.211349