Python 如何循环数据帧,并有条件地为变量行赋值?
我试图循环遍历“vol”数据帧,并有条件地检查示例日期是否在特定日期之间。如果是,则为另一列指定一个值 以下是我拥有的代码: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 = 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)。谢谢分享!将范式转换为矢量化编码方式对我来说是一条学习曲线。谢谢分享!将范式转换为矢量化编码方式对我来说是一条学习曲线。