将映射lambda转换为列表理解



对于。。。

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]))

这里的列表综合是不必要的。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']

使用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

最新更新