我正在尝试使用数组中的apply方法设置多列(而不是使用3条不同的行作为声明)。我想通过数组中的不同args从dataframe apply方法设置3列。
在单独的行中声明是可以的,但不是很干净。
days=np.array([30,45,60])
def move(row,days):
return row.X / 100 * np.sqrt(days/365)
### I am trying to clean this up -- there's got to be a simpler way!!
#df['Move30'] = df.apply(move,args=(days[0], ),axis=1)
#df['Move45'] = df.apply(move,args=(days[1], ),axis=1)
#df['Move60'] = df.apply(move,args=(days[2], ),axis=1)
### This succeeds but not any cleaner
df['Move30'], df['Move45'], df['Move60'] = df.apply(move,args=(days[0], ),axis=1), df.apply(move,args=(days[1], ),axis=1), df.apply(move,args=(days[2], ),axis=1)
### Is there some way to create...?
df['Move30'], df['Move45'], df['Move60'] = df.apply(move,args=([days[0],days[1],days[2]], ),axis=1)
答案 0 :(得分:0)
您可以将其编写为for循环:
for d in days:
df[f'Move{d}'] = df.apply(move,args=(d, ),axis=1)
在python 2中,您必须使用'Move' + str(d)
而不是f'Move {d}'。
但是,我怀疑您最好将其向量化...