我在做一個pandas系列數據框的簡單數學公式,並且在編譯大量數據時,其中一些值會變爲負數。是否有可以添加的代碼來確保減法運算的值只能達到最小值零?這是我到目前爲止:在數據框列(Pandas)中將負值修剪爲0
deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
謝謝!
我在做一個pandas系列數據框的簡單數學公式,並且在編譯大量數據時,其中一些值會變爲負數。是否有可以添加的代碼來確保減法運算的值只能達到最小值零?這是我到目前爲止:在數據框列(Pandas)中將負值修剪爲0
deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
謝謝!
您可以創建deltaT['data']
,然後使用df.loc
到負值設定爲0
deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
deltaT.loc[deltaT['data'] < 0, 'data'] = 0
你可以選擇clip_lower
在單個操作這樣做。
deltaT['data'] = (deltaT['hws'] - deltaT['hwr']).clip_lower(0)
選項1
簡單
deltaT['data'] = deltaT.eval('(hws - hwr) * (hws > hwr)')
考慮deltaT
deltaT = pd.DataFrame(dict(hws=[5, 8], hwr=[8, 5]))
deltaT.assign(data=deltaT.eval('(hws - hwr) * (hws > hwr)'))
hwr hws data
0 8 5 0
1 5 8 3
選項2
同選項1,但使用numpy的陣列
r, s = (deltaT[c].values for c in ['hwr', 'hws'])
deltaT.assign(data=(s - r) * (s > r))
hwr hws data
0 8 5 0
1 5 8 3
選項3
創造性嘗試
deltaT.assign(data=deltaT.eval('hws - hwr').to_frame().assign(_=0).max(1))
hwr hws data
0 8 5 0
1 5 8 3
deltaT['data'] = (deltaT['hws'] - deltaT['hwr']).apply(lambda x: max(x, 0))
使用deltaT.iloc [DeltaT的<0 ,'data'] =某個值,例如0 – sera