2017-07-27 1835 views
3

我在做一个pandas系列数据框的简单数学公式,并且在编译大量数据时,其中一些值会变为负数。是否有可以添加的代码来确保减法运算的值只能达到最小值零?这是我到目前为止:在数据框列(Pandas)中将负值修剪为0

deltaT['data'] = (deltaT['hws'] - deltaT['hwr']) 

谢谢!

+0

使用deltaT.iloc [DeltaT的<0 ,'data'] =某个值,例如0 – sera

回答

3

您可以创建deltaT['data'],然后使用df.loc到负值设定为0

deltaT['data'] = (deltaT['hws'] - deltaT['hwr']) 
deltaT.loc[deltaT['data'] < 0, 'data'] = 0 
3

你可以选择clip_lower在单个操作这样做。

deltaT['data'] = (deltaT['hws'] - deltaT['hwr']).clip_lower(0) 
2

选项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 
1
deltaT['data'] = (deltaT['hws'] - deltaT['hwr']).apply(lambda x: max(x, 0)) 
相关问题