设置多个应用列

时间:2019-05-15 18:18:20

标签: pandas variables apply

我正在尝试使用数组中的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)

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}'。

但是,我怀疑您最好将其向量化...