我在下面有一个函数,该函数旨在处理一列
我在数据框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循环)
答案 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