Pandas 将具有不同参数值的函数应用于不同的列 [英] Pandas apply function with different argument values to different columns

查看:36
本文介绍了Pandas 将具有不同参数值的函数应用于不同的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数据框,一个 (p) df 包含要转换的列,第二个 (a) 包含 pd.series 形式的转换参数:

I have two data frames, one (p) df contains columns to be transformed, second (a) contains transformation parameter in form of pd.series:

p=np.random.rand(5,3) #create data frame
cols=["A","B","C"]
df1=pd.DataFrame(p,columns=cols)
a=np.array([0.3,0.4,0.5]) # create series of transform parameters
a=pd.Series(a,index=cols)

我徘徊如何迭代 df 列以使用适当的转换参数来转换每个列,如下所示:

I wander how to iterate over df columns to transform each one with appropriate transform parameter, something like below:

df1.apply(stats.boxcox,lmbda=a)

这当然行不通.我的临时解决方案只是一个蛮力函数:

which of course not works. My temporary solution is just a brute force function:

def boxcox_transform(df,lambdas):
    df1=pd.DataFrame(index=df.index)
    for column in list(df):
        df1[column]=stats.boxcox(df[column],lambdas[column])
    return(df1)
boxcox_transform(df1,a)

我想知道有没有更优雅的解决方案,例如 R CRAN mapply 可以迭代两个列表

I wander is there any more elegant solution like for example R CRAN mapply which can iterate over two lists

推荐答案

您可以使用 lambda:

You can use a lambda:

result_df = df1.apply(lambda col: stats.boxcox(col, a.loc[col.name]))

这篇关于Pandas 将具有不同参数值的函数应用于不同的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆