Применить функцию к двум столбцам панд - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь применить функцию, которая вычисляет оценку R2, к двум столбцам фрейма данных pandas.Это работает, если сначала я группирую по некоторому другому столбцу, но при применении ко всему фрейму данных происходит сбой.

Этот код работает:

from sklearn.metrics import r2_score
df = pd.DataFrame({'cat':['A','A','B','B'], 'num1':[.1,.2,.3,.4], 
'num2': [.1,.2,.3,.4]})

df.groupby('cat').apply(lambda x: r2_score(x['num1'],x['num2']))

С таким выводом:

cat
A    1.0
B    1.0
dtype: float64

Но это не работает:

df.apply(lambda x: r2_score(x['num1'],x['num2']))

С ключевой ошибкой: KeyError: ('num1', 'произошел в index cat')

Может кто-нибудь объяснить, почемув этом случае проясняется внутренняя работа функции apply и предоставляется решение для последнего применения?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если я правильно понимаю ваши потребности, вы должны указать, что «применять» запускается для каждой строки, поэтому axis = 1:

df.apply(lambda x: r2_score(x['num1'],x['num2']), axis=1)

Ваш код пытается выполнить его вертикально, на столбцах и не выполняетнайдите соответствующие ключи.

Но учтите, что это не эквивалентно тому, что вы сделали с группировкой.Так что вам решать, что именно вы пытаетесь сделать.

см. Документацию здесь: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

0 голосов
/ 16 октября 2018

Я полагаю, вам нужны проходные столбцы для работы:

a = r2_score(df['num1'],df['num2'])
print (a)
1.0
...