2016-05-17 10 views
3

これはまったく簡単な質問ですが、私はここで同様の答えを見つけることができませんでした。私は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(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

私はあなたがnumpy.whereを使用することができると思う:

x = DATValues.ix[:,2] 
print (x) 
0 5 
1 6 
2 2 
3 7 
4 4 
5 7 
6 8 
7 9 
Name: c, dtype: int64 

DATValues['new'] = (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  new 
0 201603 A 5 5.182175 
1 201503 A 6 6.187350 
2 201403 A 2 2.184243 
3 201303 A 7 7.194372 
4 201603 B 4 4.179498 
5 201503 B 7 7.194372 
6 201403 B 8 8.202589 
7 201303 B 9 9.211349 

あなたは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 
関連する問題