[英]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.