【问题标题】:Python Functions with multiple arguments具有多个参数的 Python 函数
【发布时间】:2020-06-09 21:15:05
【问题描述】:

我写了以下代码

def createv(dsn,vname,benchdsn,benchvar):
    #global grp
    for t in range(len(dsn)):
        w=dsn[vname].iloc[t]
        #print(w)
        for index in range(len(benchdsn)):
            #print(index)
            z = benchdsn[benchvar].iloc[index]
            #print(z)
            if w <= z:
                grp = z
                print(grp)
                break     
            else:
                continue
    return grp

recent_sample['carvaluegrp2']= createv(recent_sample,'CarValue',df6,'carvalueU')

问题在于,对于新创建的变量 carvaluegrp2,所有值都是相同的 - 这是来自 recent_sample 的 CarValue 的最后一个值。我尝试使用 map() 和 apply() 函数,但出现语法错误。我想要的只是将适当的值(该函数为 CarValue 的每条记录返回)作为变量 carvaluegrp2 中的值。

【问题讨论】:

  • 您的else 缩进错误
  • 谢谢艾哈迈德。我现在检查了一下,打印语句中的 grp 值很好。问题是将这些值映射到新变量的数据框中的每条记录。我只得到所有记录的最后一个重复值。

标签: python function dictionary apply


【解决方案1】:

您需要将结果附加到运行列表中,如下所示:

def createv(dsn,vname,benchdsn,benchvar):
    result = []
    for t in range(len(dsn)):
        w=dsn[vname].iloc[t]
        #print(w)
        for index in range(len(benchdsn)):
            #print(index)
            z = benchdsn[benchvar].iloc[index]
            #print(z)
            if w <= z:
                grp = z
                print(grp)
                break     
            result.append(grp)
    return result

此外,您永远不需要else: continue。这与没有 else 的 if 语句相同。

【讨论】:

  • 谢谢马特。我使用了您的建议并收到以下错误:ValueError:值的长度与索引的长度不匹配
  • 我看不到你的数据,所以我无法编写解决方案,但你的输出需要与数据帧中的行数长度相同。
  • 谢谢马特。我只是稍微改变了你的建议,它奏效了!我实际上将 result.append(grp) 语句移到了 break 语句之前。
猜你喜欢
  • 2021-09-10
  • 2019-07-18
  • 1970-01-01
  • 2022-11-28
  • 2017-10-05
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多