【问题标题】:lambda function equivalent for SUMIF() in pythonpython中SUMIF()的lambda函数等效
【发布时间】:2018-12-02 21:40:49
【问题描述】:

我有一个包含 2 列“行业代码”和“金额”的 pandas 数据框。如何根据单个 lambda 函数的行业代码对 Amount 的所有实例求和? (相当于 excel 中的 sumif())我尝试了以下方法:

enter image description here

fun= lambda x,y: sum(x[i])/len(x[i]) in y[i]

我得到了结果<function __main__.<lambda>> 有什么想法吗?

【问题讨论】:

  • PEP8 明确指出您不应该使用命名 lambda:python.org/dev/peps/pep-0008/#id51 “始终使用 def 语句而不是直接将 lambda 表达式绑定到标识符的赋值语句。”
  • 你能解释一下为什么用 lambda 函数来做这件事很重要吗?你的minimal reproducible example 在哪里?预期的结果是什么?
  • 预期结果是将 lambda 作为约束应用于优化问题,例如 {'type': 'ineq', 'fun': lambda x: x.sum()-100}。

标签: python pandas lambda


【解决方案1】:

lambda 创建一个函数,这就是您分配给fun 的函数。您需要将该函数应用于参数才能进行求和。

【讨论】:

    【解决方案2】:

    为什么不直接使用groupby

    df = pd.DataFrame([['Aero', 'Energy', 'Aero', 'Hydra', 'Energy'],
                      [2, 5, 8, 6, 5]]).T
    df.columns=['industry', 'amount']
    df
       industry amount
    0   Aero    2
    1   Energy  5
    2   Aero    8
    3   Hydra   6
    4   Energy  5
    
    df.groupby('industry').sum()
            amount
    industry    
    Aero    10
    Energy  10
    Hydra   6
    

    【讨论】:

    • 谢谢我。我使用过 groupby,但我正在尝试找到一个 lambda 解决方案,以使用 minimize() 作为优化问题的约束。
    猜你喜欢
    • 2010-10-30
    • 2016-08-13
    • 2020-09-23
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多