我有一個 df,我正在嘗試根據計算填充一個新列。下面是一個例子。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"Quantity" :[4721,1647],
"Total" : [236.05,82.35]},
index = [1,2])
df["CPS Gross"]= (df["Total"]/df["Quantity"])
conditions = [df["CPS Gross"] == 0.05]
values = [0.03]
df["CPS Calc"] = np.select(conditions,values)
print(df)
有人可以向我解釋為什么第二行不符合條件測驗,而第一行即使它們都符合 0.05 的標準?
任何幫助將非常感激
uj5u.com熱心網友回復:
我不能評論你的原始帖子,所以我會給你一個答案。
第二行不滿足條件的原因是浮點數不是精確型別。盡管 82.35/1647 運算的實際結果是 0.05,但如果您在 Python 上檢查它,您會發現它給出的結果是 0.049999999999999996,這不完全是 0.05。這就是為什么82.35/1647 == 0.05是假的原因……因為它真的是假的!(在 Python 中)
您可以嘗試的一種解決方案是使用某種方法來考慮這種行為,例如math.isclose(). 它不會檢查兩個值是否完全相同,而是檢查兩個值是否在某個范圍內彼此接近(稱為公差)。
from math import isclose
...
conditions = [ws['New Gross'].apply(lambda x: isclose(x, 0.05, abs_tol=1e-8))]
values = [0.03]
df["CPS Calc"] = np.select(conditions, values)
如果你檢查你會看到現在兩行都被選中了!
uj5u.com熱心網友回復:
你可以用np.select函式替換你的函式,np.where因為它可以有一個奇異值作為輸入:
ws["CPS Calc"] = np.where(ws["New Gross"]==0.05,0.03,np.nan)
當條件不成立時,最后一個值是默認值(我假設它是 NaN 但可以是任何值)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348733.html
上一篇:二維陣列的Numpy梯度
