Pythons逐行应用数据

时间:2018-03-06 20:41:27

标签: python pandas dataframe row

我不明白在创建函数时,如果函数有其他参数,应该如何使用“行”。 我想创建一个函数来计算我的数据框“文件”的新列。

这很有效:

def imputation(row):    
    if  (row['hour_y']==0) & (row['outlier_idx']==True) :
        val=file['HYDRO'].mean()
    else : 
        val=row['HYDRO']
    return val

file['minute_corr'] = file.apply(imputation, axis=1) 

但这不起作用(我添加了一个论点):

def imputation(row,variable):    
    if  (row['hour_y']==0) & (row['outlier_idx']==True) :
        val=file[variable].mean()
    else : 
        val=row[variable]
    return val
file['minute_corr'] = file.apply(imputation(,'HYDRO'), axis=1) 

3 个答案:

答案 0 :(得分:1)

尝试这种矢量化方法:

file['minute_corr'] = np.where((file['hour_y']==0) & file['outlier_idx'],
                               file['HYDRO'].mean(),
                               file['HYDRO'])

答案 1 :(得分:0)

使用apply函数,您还可以并行化计算。

file['minute_corr'] = file.apply(lambda row: (file['HYDRO'].mean() if (row['hour_y']==0) & (row['outlier_idx']==True) else row['HYDRO'] ), axis=1)

答案 2 :(得分:0)

apply方法可以采用位置和关键字参数:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html

对于最后一行尝试: 尝试:

file['minute_corr'] = file.apply(imputation,args=('HYDRO',), axis=1)