如何循环遍历pandas dataframe,并有条件地为变量的一行分配值?

2024-09-27 04:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在“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

以下是我收到的错误: TypeError:“Series”对象是可变的,因此不能对它们进行哈希处理


Tags: 数据sample代码dataframedatadaterange条件
2条回答

另一种方法是将numpy模块中的np.where方法与.between方法结合使用。在

此方法的工作原理如下:
np.where(condition, value if true, value if false)

代码示例

cond = vol.sample_date.between('2015-11-03', '2018-06-07')
vol['hydraulic_vol'] = np.where(cond, 319779, np.nan)

或者您可以将它们组合在一行代码中:

^{pr2}$

编辑
我知道你是新来的,所以来python/pandas的时候我也要学习一些东西。在

在一个数据帧上循环应该是你的最后手段,尝试使用vectorized solutions,在这种情况下.loc或{},与循环相比,这些方法在速度方面表现得更好。在

你应该这样做:

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

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

相关问题 更多 >

    热门问题