当列标题位于列表中时,将函数应用于多个列

时间:2019-04-24 08:04:11

标签: python pandas

我在下面有一个函数,该函数旨在处理一列

我在数据框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循环)

2 个答案:

答案 0 :(得分:1)

首先,您似乎没有使用cols变量,所以我不确定您按列应用的内容。不过,DataFrame.apply方法应该可以满足您的要求。

答案 1 :(得分:1)

也许是这样吗?

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