Как применить r2_score для группы в Pandas - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть фрейм данных, который выглядит примерно так:

dt = {
    "Item Id" : [1, 1, 1, 2, 2, 3, 4, 5, 5, 5, 5],
    "Projected Sales" : [10, 20, 30, 40, 49, 4, 2, 3, 4, 10, 22],
    "Actual Sales": [4, 5, 3, 10, 4, 42, 23, 1, 19, 24, 22]
}

sample_df = pd.DataFrame.from_dict(dt)

Вывод:

    Item Id  Projected Sales  Actual Sales
0         1               10             4
1         1               20             5
2         1               30             3
3         2               40            10
4         2               49             4
5         3                4            42
6         4                2            23
7         5                3             1
8         5                4            19
9         5               10            24
10        5               22            22

Я пытаюсь сгенерировать новый фрейм данных со схемой, подобной:

Item Id  R2_Score
x        y
...

Где оценка R2 - это значение R2 для этого item_id. Я написал следующий код:

def r2_per_group(data, truth, predicted):
    score = r2_score(data[truth], data[predicted])

    print(score)

    return r2_score(data[truth], data[predicted])

result = sample_df.groupby('Item Id').apply(r2_per_group, 'Actual Sales', 'Projected Sales')

Хотя это прекрасно работает для этого небольшого кадра данных. Однако мне нужно выполнить это для гораздо большего кадра данных ~ 5000000 строк с более чем 2000 группами, и я вижу противоречивые результаты, когда распечатанное значение r2_value не является значением r2_value, наблюдаемым в результирующем кадре данных для определенных идентификаторов элементов.

Я довольно растерялся из-за того, как это могло произойти.

1 Ответ

0 голосов
/ 14 апреля 2020

Это на самом деле работает точно так, как задумано. По какой-то причине я доверял отображаемому R2_Score для определенных ячеек при выполнении

result_df.head

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

...