Я пытаюсь применить функцию, которая вычисляет баллы 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', 'произошло в cat файле индекса)
Может ли кто-нибудь объяснить, почему это так, объясняя внутреннюю работу функции apply и предоставляя решение для последних?
Я считаю, что вам нужны столбцы доступа для работы:
a = r2_score(df['num1'],df['num2'])
print (a)
1.0
Если я правильно понимаю вашу потребность, вы должны указать, что "применить" прогон на строку, так что ось = 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
from sklearn.metrics import r2_score