我正在嘗試根據其他列和我創建的函式在 Pandas 資料框中計算一個新列。而不是使用for回圈,我更喜歡將函式應用于整個資料框列。
我的代碼是這樣的:
df['po'] = vect.func1(df['gra'],
Se,
df['p_a'],
df['t'],
Tc)
其中 df['gra']、df['p_a'] 和 df['t'] 是我的資料框列(引數),而 Se 和 Tc 是其他(真實)引數。df['po'] 是我的新專欄。
func1 是我的 vect 包中描述的函式。這個功能是:
def func1(g, surf_e, Pa, t, Tco):
if (t <= Tco):
pos = (g-(Pa*surf_e*g))
else:
pos = 0.0
return(pos)
以這種方式實作時,我收到一條錯誤訊息,該訊息涉及以下行: if (t <= Tco):
錯誤是: ValueError: 系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我閱讀了熊貓檔案,但沒有找到解決方案。任何人都可以解釋我有什么問題嗎?
我嘗試使用apply:
例如 :
df['po'] = df['gra'].apply(vect.func1)
但我不知道如何使用多列作為引數的應用。
提前謝謝你。
uj5u.com熱心網友回復:
使用np.where所要求的條件,當條件為真值和默認值。
df['po'] = np.where(
df['t'] <= Tc, # Condition
df['gra'] - (df['P_a'] * Se * df['gra']), # Value if True
0 # Value if False
)
編輯:
不要忘記 import numpy as np
此外,您會收到一個錯誤,因為您將一個系列與一個系列進行比較,從而獲得一系列布林值,而不是條件需要的原子布林值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401154.html
上一篇:R中選擇函式的總和
下一篇:PHP中的非法字串偏移“動作”
