Как я могу элегантно вычислить квадрат r в фрейме данных pandas?

#python #pandas

#python #pandas

Вопрос:

предположим, у меня есть фрейм данных, я хочу вычислить квадрат r между двумя столбцами.

ps. не r2 (df [0], df [1]), мне нужен r2, который использует df [0], чтобы ols соответствовал r2 df [1].

например:

 In [21]: df = pd.DataFrame(np.random.rand(10, 2))

In [22]: df
Out[22]: 
          0         1
0  0.776080  0.966668
1  0.922351  0.024381
2  0.859104  0.397823
3  0.607491  0.425335
4  0.732265  0.667846
5  0.336950  0.544515
6  0.236403  0.610943
7  0.811736  0.306425
8  0.110440  0.059754
9  0.469844  0.957298
 

как я могу вычислить r2 для столбца 1, соответствующего столбцу 0?

Комментарии:

1. sklearn.metrics.r2_score(df[0], df[1]) shoud выполнит задание

2. Что вы пробовали до сих пор?

Ответ №1:

Как уже говорилось в комментариях, у sklearn есть метод вычисления квадрата r.

 from sklearn.metrics import r2_score

r2_score(df[0], df[1])

# -1.8462387938183031
 

Но чтобы ответить на ваш вопрос и вычислить его самостоятельно в pandas, мы можем использовать векторизованные методы:

 res = df[0].sub(df[1]).pow(2).sum()
tot = df[0].sub(df[0].mean()).pow(2).sum()

r2 = 1 - res/tot

# -1.8462387938183031
 

Комментарии:

1. отлично, спасибо Эрфану, я думаю, что метод pandas быстрее?

2. Не уверен на 100%, вы можете протестировать его с большими наборами данных, разница не должна быть слишком большой, поскольку scikit-learn использует numpy под капотом.

3. Привет, извините за вторжение. Я мод на Ask Ubuntu. Если вы хотите восстановить свой вопрос , я буду рад отредактировать и снова открыть его. Хотя прокомментировавший пользователь был прав в том, что в целом решение для всех таких ошибок заключается в удалении или исправлении нарушающей строки, представляется важным объяснить, как это исправить в данном конкретном случае. Конечно, это ваш выбор 🙂