首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python逐行在dataframe上应用函数

Python逐行在dataframe上应用函数
EN

Stack Overflow用户
提问于 2018-03-07 04:41:27
回答 3查看 36关注 0票数 1

当函数有其他参数时,我不明白在创建函数时应该如何使用"row“参数。我想创建一个函数来计算我的dataframe "file“中的新列。

这样做效果很好:

代码语言:javascript
运行
复制
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) 

但这不起作用(我添加了一个参数):

代码语言:javascript
运行
复制
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) 
EN

回答 3

Stack Overflow用户

发布于 2018-03-07 04:45:35

尝试这种矢量化方法:

代码语言:javascript
运行
复制
file['minute_corr'] = np.where((file['hour_y']==0) & file['outlier_idx'],
                               file['HYDRO'].mean(),
                               file['HYDRO'])
票数 1
EN

Stack Overflow用户

发布于 2018-03-07 05:13:41

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

代码语言:javascript
运行
复制
file['minute_corr'] = file.apply(lambda row: (file['HYDRO'].mean() if (row['hour_y']==0) & (row['outlier_idx']==True) else row['HYDRO'] ), axis=1)
票数 0
EN

Stack Overflow用户

发布于 2018-03-07 05:26:42

apply方法可以接受位置参数和关键字参数:

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

最后一行try: Try:

代码语言:javascript
运行
复制
file['minute_corr'] = file.apply(imputation,args=('HYDRO',), axis=1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49139581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档