Python:迭代地运行一组类似的定义

时间:2016-03-10 23:12:57

标签: python excel pandas

我有一个脚本,它在其中运行一系列定义,如下所示:

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循环或其他一些)?只是让它改变名称,因为它贯穿它们?

1 个答案:

答案 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)