我正在进行关于pandas系列数据框的简单数学方程计算,但是在编译大量数据时,一些值会变成负数。有没有代码可以添加,以确保减法运算的值只到达最小值为零?这是我目前的代码:
deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
谢谢!
我正在进行关于pandas系列数据框的简单数学方程计算,但是在编译大量数据时,一些值会变成负数。有没有代码可以添加,以确保减法运算的值只到达最小值为零?这是我目前的代码:
deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
谢谢!
clip_lower
来在单个操作中完成。deltaT['data'] = (deltaT['hws'] - deltaT['hwr']).clip_lower(0)
np.clip
。 - miradulodeltaT['data']
,然后使用 df.loc
将负值设置为0。deltaT['data'] = (deltaT['hws'] - deltaT['hwr'])
deltaT.loc[deltaT['data'] < 0, 'data'] = 0
选项1
简单
deltaT['data'] = deltaT.eval('(hws - hwr) * (hws > hwr)')
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
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))