python中函数的多个输入/输出参数

时间:2018-03-22 15:25:32

标签: python pandas function multiple-columns

我编写了以下函数将一个值(col)与unit(ufrom)转换为另一个单元(uto):

def convert(row, col , ufrom, uto):
    convRow = convDF[(convDF.from == row[ufrom]) & (convDF.to == uto)]
    val = row[col] / convRow.factor
    return(val, uto)

convDF是一个包含多个单位及其转换因子的数据框。我把这个函数称为:

for idx, row in df.iterrows():
    if row.Unit!= 'MM':
        df.at[idx, ['Width', 'Unit']] = convert(row,'Width', 'Unit', 'MM')
        df.at[idx, ['Length', 'Unit']] = convert(row,'Length', 'Unit', 'MM')
        df.at[idx, ['Hight', 'Unit']] = convert(row,'Hight', 'Unit', 'MM')

convert函数获取当前行,包含需要转换的值的列,源单元列以及目标单元。到目前为止它完美无缺。

正如你所看到的,我调用了这个函数三次,但我想知道我是否可以调用它一次并传递所有三个参数(Width,Length,Hight)并转换它们,因为它们具有相同的列,引用它们的单位(单位)和相同的目的地单位(uto)。所以我希望该函数能够处理单个值和多个值。 最后,这个

df.at[idx, ['Width', 'Unit']] = convert(row,'Width', 'Unit', 'MM')

应该和这个一样好用

df.at[idx, ['Width','Length','Hight', 'Unit']] = convert(row,['Width','Length','Hight'],'Unit', 'MM')

尝试使用* - 语法传递1:n参数,但如何更改convert函数以提供多个或单个结果?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以让您的函数将列列表作为参数,然后根据列列表中的内容返回列表。例如,

def convert(row, cols , ufrom, uto):
    values=[]
    for col in cols:
        convRow = convDF[(convDF.from == row[ufrom]) & (convDF.to == uto)]
        values.append(row[col] / convRow.factor) 
    values.append(ufrom) 
    return values

然后你可以把它称为

df.at[idx, ['Width','Length','Hight', 'Unit']] = convert(row,['Width','Length','Hight'],'Unit', 'MM')

或者在一列的情况下,只需要一个包含一个元素的列表:

df.at[idx, ['Width', 'Unit']] = convert(row,['Width'],'Unit', 'MM')