Применить функцию к двум столбцам панд

1

Я пытаюсь применить функцию, которая вычисляет баллы 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 и предоставляя решение для последних?

Теги:
pandas
apply

2 ответа

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

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

a = r2_score(df['num1'],df['num2'])
print (a)
1.0
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

  • 0
    Нет, попробуйте from sklearn.metrics import r2_score
  • 1
    У меня нет доступа к этому модулю. На самом деле это зависит от функции, которую вы пытаетесь запустить, и от того, какие аргументы она принимает. В общем, при попытке применить строку за строкой вам нужно использовать axis = 1. Если эта функция принимает целые столбцы, то ответ @ Jerzrael будет благоприятным.

Ещё вопросы

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