Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从常量值中减去满足条件的列值_Python_Pandas - Fatal编程技术网

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