установка нескольких примененных столбцов - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь установить несколько столбцов с помощью метода apply из массива (вместо 3 разных строк в качестве объявления). Я хотел бы, чтобы из столбца данных применялись 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 голосов
/ 15 мая 2019

Вы можете написать это как цикл for:

for d in days:
    df[f'Move{d}'] = df.apply(move,args=(d, ),axis=1)

В Python 2 вам придется использовать 'Move' + str(d) вместо f'Move {d} '.

Однако я подозреваю, что вам лучше было бы векторизовать это ...

...