【问题标题】:Convert map lambda to list comprehension将 map lambda 转换为列表理解
【发布时间】:2019-01-06 11:42:38
【问题描述】:

为了……

import pandas as pd
df = pd.DataFrame({'a': 1, 'b': range(4)})

def sumthis(a, b):
    return a+b

df['sum'] = list(map(lambda x, y: sumthis(x, y), [i for i in df.a], [j for j in df.b]))

...列表推导的作用是什么?

list(map(lambda x, y: sumthis(x, y), [i for i in df.a], [j for j in df.b]))

【问题讨论】:

    标签: python list pandas list-comprehension iterable


    【解决方案1】:

    这里的列表推导是不必要的。 Pandas 系列对象是可迭代的,不需要列表转换。此外,通过推导将系列转换为列表效率低下。为了演示后一点,您可以更有效地使用pd.Series.tolist

    df['sum'] = list(map(lambda x, y: sumthis(x, y), df['a'].tolist(), df['b'].tolist()))
    

    相反,您可以使用单个列表推导:

    df['sum'] = [sumthis(a, b) for a, b in zip(df['a'], df['b'])]
    

    但是,在可能的情况下,您应该更喜欢矢量化操作以利用底层 NumPy 数组。在这个微不足道的情况下:

    df['sum'] = df['a'] + df['b']
    

    【讨论】:

      【解决方案2】:

      使用zip:

      df['sum'] = [sumthis(x, y) for x, y in zip(df.a, df.b)]
      
      print (df)
         a  b  sum
      0  1  0    1
      1  1  1    2
      2  1  2    3
      3  1  3    4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2020-03-16
        相关资源
        最近更新 更多