【发布时间】:2018-03-22 15:25:32
【问题描述】:
我编写了以下函数来将单位(ufrom)的值(col)转换为另一个单位(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')
转换函数获取当前行、包含需要转换的值的列、源单元列以及目标单元。到目前为止,它运行良好。
如您所见,我调用了该函数三次,但我想知道是否可以调用一次并传递所有三个参数(宽度、长度、高度)并转换它们,因为它们具有引用其单位的相同列( Unit) 和相同的目标单元 (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')
尝试使用 *-syntax 传递 1:n 参数,但如何更改转换函数以提供多个或单个结果?
谢谢!
【问题讨论】:
-
你可以让你的函数接受
row参数的迭代并将迭代移动到函数体。但在这种情况下,这只会使事情变得模糊。
标签: python pandas function multiple-columns