Python 将具有不同参数值的函数应用于不同的列

Python 将具有不同参数值的函数应用于不同的列,python,pandas,apply,Python,Pandas,Apply,我有两个数据帧,一个(p)df包含要转换的列,第二个(a)包含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列以使用适

我有两个数据帧,一个(p)df包含要转换的列,第二个(a)包含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列以使用适当的转换参数对每个列进行转换,如下所示:

df1.apply(stats.boxcox,lmbda=a)
这当然行不通。我的临时解决方案只是一个蛮力函数:

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
,它可以迭代两个列表

您可以使用lambda:

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

完美的谢谢我可以问一下什么是a吗?@ju。看看这个问题。这是一个由提问者定义的系列。