Python 从常量值中减去满足条件的列值
我正在尝试计算加热度天数。我有以下数据框:Python 从常量值中减去满足条件的列值,python,pandas,Python,Pandas,我正在尝试计算加热度天数。我有以下数据框: df.head() Out[196]: NUTS_ID t2m Date 2010-01-01 AT11 4.134250 2010-07-01 AT11 24.019817 2010-07-01 AT12 21.902833 2010-01-01 AT12 2.687778 2010-01-01 AT13 3.7969
df.head()
Out[196]:
NUTS_ID t2m
Date
2010-01-01 AT11 4.134250
2010-07-01 AT11 24.019817
2010-07-01 AT12 21.902833
2010-01-01 AT12 2.687778
2010-01-01 AT13 3.796989
如果列t2m
中的所有温度低于此数值,我想从18中减去它们,并将0分配给t2m大于18的列。就是
NUTS_ID t2m HDD
Date
2010-01-01 AT11 4.134250 13.865750
2010-07-01 AT11 24.019817 0
2010-07-01 AT12 21.902833 0
2010-01-01 AT12 2.687778 15.312222
2010-01-01 AT13 3.796989 14.203011
我试过了
df.loc[df['t2m']<18,'HDD']=18-df['t2m']
df.loc[df['t2m']>18,'HDD']=0
df.loc[df['t2m']18,'HDD']=0
但是我得到了
ValueError:无法从重复的轴重新编制索引
(可能在第一行中,我会影响高于18的行的值)。我怎样才能修好它?感谢您的帮助。一个有效的方法是使用np。其中:
import numpy as np
df['HDD'] = np.where(df['t2m'] > 18,0,18 - df['t2m'])
Out[97]:
Date NUTS_ID t2m HDD
0 2010-01-01 AT11 4.13 13.87
1 2010-07-01 AT11 24.02 0.00
2 2010-07-01 AT12 21.90 0.00
3 2010-01-01 AT12 2.69 15.31
4 2010-01-01 AT13 3.80 14.20
您可以使用:
>>> df['HDD'] = (18 - df.t2m).clip(lower=0)
NUTS_ID t2m HDD
Date
2010-01-01 AT11 4.134250 13.865750
2010-07-01 AT11 24.019817 0.000000
2010-07-01 AT12 21.902833 0.000000
2010-01-01 AT12 2.687778 15.312222
2010-01-01 AT13 3.796989 14.203011