2016-03-10 2 views
-1

У меня есть скрипт, который запускает ряд определений в нем, что выглядит следующим образом:Python: Итеративно запустить набор подобных определений

def object1 (row): 
    if row['Item'] == 'object 1': 
     return row['Qty'] 
    else: 
     return 0 

df['object name 1'] = df.apply(lambda row: object1(row),axis=1) 


def object2 (row): 
    if row['Item'] == 'object2': 
     return row['Qty'] 
    else: 
     return 0 

df['object name 2'] = df.apply(lambda row: object2(row),axis=1) 


def object3 (row): 
    if row['Item'] == 'object3': 
     return row['Qty'] 
    else: 
     return 0 
df['object name 3'] = df.apply(lambda row: object3(row),axis=1) 

Есть несколько из них. Они определяют формулу, заданную некоторыми параметрами в листе excel. Просто пытаюсь немного очистить сценарий. Есть ли способ запустить эти определения в одной большой команде (например, цикл for или какой-либо такой)? И просто измените ли они имена, когда они проходят через них?

ответ

0

Вы можете использовать .loc и шаблон, как это:

object_names = ['object 1', 'object 2', 'object 3'] 
column_names = ['object name 1', 'object name 2', 'object name 3'] 
for obj_name, col_name in zip(object_names, column_names): 
    df[col_name] = df.loc[df['Item']==obj_name, 'Qty'] 

df.fillna(0, inplace=True) 

Код выше позволяет точно указать, какие значения df['Item'], что вы хотите посмотреть, и позволяет настраивать с именами столбцов.

Если вы просто хотите перебрать все значения в df['Item'], и нужно только общие имена столбцов, вы можете использовать что-то вдоль линий:

for item_name in df['Item'].unique(): 
    col_name = '{} Column'.format(item_name) 
    df[col_name] = df.loc[df['Item']==item_name, 'Qty'] 

df.fillna(0, inplace=True) 
Смежные вопросы