簡體   English   中英

帶有條件語句的函數到pandas系列

[英]Function with conditional statement to pandas series

這是一個非常簡單的問題,然而,我無法在這里找到類似的答案。 我有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().

使用上述所有命題​​都不起作用。 捕獲量在哪里?

我想你可以使用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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM