Конвертировать карту лямбда в список понимания

1

За...

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
list
list-comprehension
iterable

2 ответа

1
Лучший ответ

Используйте 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
2

Перечисления списков здесь не нужны. Объекты серии 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']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню