我的數據幀具有浮點和布爾的混合:如何計算pandas數據框中bool和float列的新矢量化列?
df = pd.DataFrame.from_csv("C:\....")
df['isActive'] = (df.turns >= 250) & (df.alivePct > 0) & (df.changePct > 0)
我想創建一個新的列,其中,如果isActive == false,則值= 0,否則值等於一些計算量的,是這樣的:
df['interestingness'] = (df.changePct * df.alivePct) if df.isActive else 0
但是因爲df.isActive是一個系列,我得到這個錯誤:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
看來,三元的if/else操作員不能用於矢量化操作。
我該怎麼做手動迭代呢?
(注:一個簡單的黑客是通過df.isActive多次將其值設置爲0爲假== 0,但是我想知道一個更通用的解決方案。)
你是什麼更普遍的是什麼意思?另外,爲什麼它是黑客?它不會真正得到更多的普遍/比乘法少hacky ... – acushner 2014-11-06 15:40:15
也,我的意思是,我看到你的關注,如「如果布爾人不是0和1?」但我會想,是的,只是將它們轉換成零和一個,然後返回乘法。 'np.where'解決方案也不錯。 – acushner 2014-11-06 15:44:17