当列标题在lis中时,将函数应用于多个列

2024-10-04 11:32:48 发布

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

我在下面有一个函数,它被设计用于处理一个列

我有一个列标题列表,在dataframe df中

cols=[col1,col2,col3]
def retention(adstock_rate, df,variablename):
    adstocked_advertising = []
    for i, row in enumerate(df.iterrows()):
        if i == 0: 
            adstocked_advertising.append(df[variablename][i])
        else:
            adstocked_advertising.append(df[variablename][i] + adstock_rate * adstocked_advertising[i-1]) 
    outname=variablename+"_RET"+str(int(adstock_rate*100))
    se = pd.Series(adstocked_advertising)
    df[outname] = se.values

出于好奇,是否可以使用lambda或其他方法将此函数应用于多个列(我目前正在使用for循环)


Tags: 函数标题dataframedf列表forratecols
2条回答

也许是这样

df = pd.DataFrame({'A':np.arange(5,10,1)})

def retention( df,variablename,adstock_rate ):
    result=[df[variablename][0]]+[adstock_rate * last_a + this_a for this_a, last_a in zip(df[variablename][1:], df[variablename])]
    outname=variablename+"_RET"+str(int(adstock_rate*100))
    df[outname]=result
    return result

retention(df,'A',0.5)

结果:

   A  A_RET50
0  5      5.0
1  6      8.5
2  7     10.0
3  8     11.5
4  9     13.0

首先,您似乎没有使用cols变量,所以我不确定按列应用的是什么。然而,DataFrame.apply方法应该做您想做的事情

相关问题 更多 >