Python 如何循环数据帧,并有条件地为变量行赋值?

Python 如何循环数据帧,并有条件地为变量行赋值?,python,pandas,loops,if-statement,conditional,Python,Pandas,Loops,If Statement,Conditional,我试图循环遍历“vol”数据帧,并有条件地检查示例日期是否在特定日期之间。如果是,则为另一列指定一个值 以下是我拥有的代码: vol = pd.DataFrame(data=pd.date_range(start='11/3/2015', end='1/29/2019')) vol.columns = ['sample_date'] vol['hydraulic_vol'] = np.nan for i in vol.iterrows(): if pd.Timestamp('2015-

我试图循环遍历“vol”数据帧,并有条件地检查示例日期是否在特定日期之间。如果是,则为另一列指定一个值

以下是我拥有的代码:

vol = pd.DataFrame(data=pd.date_range(start='11/3/2015', end='1/29/2019'))
vol.columns = ['sample_date']
vol['hydraulic_vol'] = np.nan
for i in vol.iterrows():
    if  pd.Timestamp('2015-11-03') <= vol.loc[i,'sample_date'] <= pd.Timestamp('2018-06-07'):
        vol.loc[i,'hydraulic_vol'] = 319779
vol=pd.DataFrame(data=pd.date\u范围(开始日期为2015年11月3日,结束日期为2019年1月29日))
vol.columns=['sample_date']
体积['hydraulic_vol']=np.nan
对于第i卷iterrows():

如果pd.Timestamp('2015-11-03')这是您正确操作的方式:

cond = (pd.Timestamp('2015-11-03') <= vol.sample_date) & 
       (vol.sample_date <= pd.Timestamp('2018-06-07'))

vol.loc[cond, 'hydraulic_vol'] = 319779

cond=(pd.Timestamp('2015-11-03')这是正确执行的方法:

cond = (pd.Timestamp('2015-11-03') <= vol.sample_date) & 
       (vol.sample_date <= pd.Timestamp('2018-06-07'))

vol.loc[cond, 'hydraulic_vol'] = 319779

cond=(pd.Timestamp('2015-11-03')另一种方法是使用
numpy
模块中的
np.where
方法,并结合
.between
方法

此方法的工作原理如下:
np.其中(条件、值(如果为真)、值(如果为假)

代码示例

cond = vol.sample_date.between('2015-11-03', '2018-06-07')
vol['hydraulic_vol'] = np.where(cond, 319779, np.nan)
或者,您可以将它们组合在一行代码中:

vol['hydraulic_vol'] = np.where(vol.sample_date.between('2015-11-03', '2018-06-07'), 319779, np.nan)
编辑
我知道你是新来的,所以来到python/pandas,我也必须学习一些东西


在数据帧上循环应该是您的最后手段,尝试使用
矢量化解决方案
,在本例中为
.loc
np。其中
,与循环相比,这些方法在速度方面表现得更好。

另一种方法是结合使用
numpy
模块中的
np.where
方法使用
.between
方法进行离子交换

此方法的工作原理如下:
np.其中(条件、值(如果为真)、值(如果为假)

代码示例

cond = vol.sample_date.between('2015-11-03', '2018-06-07')
vol['hydraulic_vol'] = np.where(cond, 319779, np.nan)
或者,您可以将它们组合在一行代码中:

vol['hydraulic_vol'] = np.where(vol.sample_date.between('2015-11-03', '2018-06-07'), 319779, np.nan)
编辑
我知道你是新来的,所以来到python/pandas,我也必须学习一些东西


在数据帧上循环应该是您的最后手段,尝试使用
矢量化解决方案,在这种情况下
.loc
np。在
中,这些方案在速度方面比循环性能更好。

尝试
vol.sample\u日期('2015-11-03','2018-06-07'))
Datetimes
足够聪明,可以与字符串和进行比较。between更具可读性:D(IMO)。请尝试
vol.sample\u date。between('2015-11-03','2018-06-07')
Datetimes
足够聪明,可以与字符串和进行比较。between更具可读性:D(IMO)。谢谢分享!将范式转换为矢量化编码方式对我来说是一条学习曲线。谢谢分享!将范式转换为矢量化编码方式对我来说是一条学习曲线。