Python – Pandas – рассчитать расширяющееся среднее значение для каждой группы, исключая текущийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python – Pandas – рассчитать расширяющееся среднее значение для каждой группы, исключая текущий

Сообщение Anonymous »

Цель: вычислить расширяющееся среднее значение столбца «оценка» для каждой группы «слизняков», исключая значение текущей строки (и соблюдая порядок, например «неделя»).
Пример набора данных (выход — желаемый результат).

Код: Выделить всё

idx week    slug    valuation   output
0   2   slouk   -4  12.00
1   3   slouk   7   4.00
2   4   slouk   8   5.00
3   3   kenun   10  14.00
4   1   kenun   11
5   1   slouk   12
6   2   kenun   17  11.00
7   4   kenun   21  12.67
Я пробовал (и не получилось):

Код: Выделить всё

# chaining
td["output"] = (
td.sort_values(by="week")
.groupby("slug")["valuation"]
.shift()
.expanding()
.mean()
.reset_index(drop=True)
)

# apply
td["output"] = (
td.sort_values(by="week")
.groupby("slug")["valuation"]
.apply(lambda x: x.shift().expanding().mean())
.reset_index(drop=True)
)
Затем я наткнулся на эту связанную тему, и .sort_index(level=1) помог.
Итак, теперь это работает :

Код: Выделить всё

td["output"] = (
td.sort_values(by="week")
.groupby("slug")["valuation"]
.apply(lambda x: x.shift().expanding().mean())
.sort_index(level=1)
.reset_index(drop=True)
)
Версия «Применить» работает, хотя и довольно медленно на больших наборах данных. Когда я пробую .sort_index(level=1) с версией «цепочки», это все равно не работает.
Хотя это работает, у меня все еще есть несколько моментов, которые я' хотелось бы лучше понять:
  • Проблема цепочки методов: когда я использую цепочку методов, например td.groupby('slug')['valuation'].shift().expanding().mean(), похоже, после определенного момента он теряет контроль над группировкой. Я не понимаю, почему это происходит и чем оно отличается от использования apply.
  • Индексирование и присвоение с помощью apply: использование apply с лямбда-функцией выполняет операцию правильно, но порядок полученной серии отличается от моего исходного DataFrame. Когда я пытаюсь назначить его обратно с помощью .reset_index(drop=True), все выравнивается неправильно. Мне нужна ясность в отношении того, как работает этот процесс переназначения.
  • Есть ли другой, более эффективный способ сделать то, что мне нужно?< /p>
Моя цель — лучше понять эти методы, особенно после того, как я потратил пару часов на устранение неполадок. Я надеюсь, что эта информация поможет и другим, столкнувшимся с аналогичными проблемами.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-current
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»