Python: Iterativamente eseguire un insieme di definizioni simili

Ho uno script che gestisce una serie di definizioni in esso che sembra così:

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) 

Ci sono una manciata di questi. Essi definiscono una formula fornita di determinati parametri nel foglio excel. Solo cercando di pulire lo script un po '. C'è un modo per eseguire queste definizioni in un grande command (ad esempio, un for loop o alcuni di questi)? E basta cambiare i nomi che li attraversano?

Solutions Collecting From Web of "Python: Iterativamente eseguire un insieme di definizioni simili"

Potresti usare .loc e un model come questo:

 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) 

Il codice di cui sopra consente di specificare esattamente quali valori in df['Item'] che si desidera cercare e consente la personalizzazione con i nomi delle colonne.

Se si desidera eseguire l'iterazione su tutti i valori in df['Item'] e solo i nomi di colonna generici, è ansible utilizzare qualcosa in base a:

 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)