我有一个脚本,它在其中运行一系列定义,如下所示:
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 :(得分: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)