У меня есть пример кадра данных со столбцами 'one' и 'two', состоящими из нескольких случайных целых чисел. Я пытался понять некоторый код с лямбда-функцией более глубоко и был озадачен тем, что код, по-видимому, волшебным образом работает без предоставления аргумента для передачи лямбда-функции.
Сначала я создаю новый столбец 'newcol' с помощью метода assign () от pandas и передаю df в явную лямбда-функцию func (df). Функция возвращает журналы столбца 'one' в df:
df=df.assign(newcol=func(df))
Пока все хорошо.
Однако меня удивляет то, что код работает так же, не передавая df.
df=df.assign(newcol2=func)
Даже если я не передам (df) в лямбда-функцию, она правильно выполнит операцию. Как интерпретатор узнает, что df передается в лямбда-функцию?
Пример кода ниже и вывод:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,10,size=16).reshape(8,2),columns=["one","two"])
func=lambda x: np.log(x.one)
df=df.assign(newcol=func(df))
print(df)
#This one works too, but why?
df=df.assign(newcol2=func)
print(df)
Output:
one two newcol newcol2
0 1 8 0.000000 0.000000
1 6 7 1.791759 1.791759
2 2 6 0.693147 0.693147
3 2 8 0.693147 0.693147
4 4 2 1.386294 1.386294
5 9 3 2.197225 2.197225
6 2 2 0.693147 0.693147
7 4 7 1.386294 1.386294
(заметьте, я мог бы использовать лямбда-функцию, встроенную в assign, но для ясности здесь она была бы явной).