Pandas groupby diff

Итак, мой dataframe выглядит так:

from pandas.compat import StringIO d = StringIO(''' date,site,country,score 2018-01-01,google,us,100 2018-01-01,google,ch,50 2018-01-02,google,us,70 2018-01-03,google,us,60 2018-01-02,google,ch,10 2018-01-01,fb,us,50 2018-01-02,fb,us,55 2018-01-03,fb,us,100 2018-01-01,fb,es,100 2018-01-02,fb,gb,100 ''') df = pd.read_csv(d, sep=",") 

В зависимости от страны каждый сайт имеет разные баллы. Я пытаюсь найти разницу в соотношении 1/3/5 дня для каждой комбинации сайтов / стран.

Выход должен быть:

 date,site,country,score,1_day_diff 2018-01-01,google,ch,50,0 2018-01-02,google,ch,10,-40 2018-01-01,google,us,100,0 2018-01-02,google,us,70,-30 2018-01-03,google,us,60,-10 2018-01-01,fb,es,100,0 2018-01-02,fb,gb,100,0 2018-01-01,fb,us,50,0 2018-01-02,fb,us,55,5 2018-01-03,fb,us,100,45 

Сначала я попробовал сортировку по сайту / стране / дате, а затем группировался по сайту и стране, но я не могу обернуть голову, чтобы получить разницу от сгруппированного объекта.

Сначала отсортируйте DataFrame, а затем все, что вам нужно, это groupby.diff() :

 df = df.sort_values(by=['site', 'country', 'date']) df['diff'] = df.groupby(['site', 'country'])['score'].diff().fillna(0) df Out: date site country score diff 8 2018-01-01 fb es 100 0.0 9 2018-01-02 fb gb 100 0.0 5 2018-01-01 fb us 50 0.0 6 2018-01-02 fb us 55 5.0 7 2018-01-03 fb us 100 45.0 1 2018-01-01 google ch 50 0.0 4 2018-01-02 google ch 10 -40.0 0 2018-01-01 google us 100 0.0 2 2018-01-02 google us 70 -30.0 3 2018-01-03 google us 60 -10.0 

sort_values не поддерживает произвольные упорядочения. Если вам нужно сортировать произвольно (например, google перед fb), вам необходимо сохранить их в коллекции и установить свой столбец как категориальный. Тогда sort_values ​​будет соблюдать порядок, который вы там указали.

  • Как присоединиться к двум файлам данных, для которых значения столбцов находятся в определенном диапазоне?
  • Список всех базовых classов в иерархии данного classа?
  • Конкатенация строк без оператора «+»
  • Объяснение того, как работает вложенный список?
  • сценарий установки вышел с ошибкой: команда «x86_64-linux-gnu-gcc» не удалась с статусом выхода 1
  • Как вернуть словарные ключи в список в Python?
  • Аргументы по умолчанию: * args и ** kwargs
  • Как повернуть рамку данных
  • Как получить имя переменной в виде строки?
  • Как понять термин «тензор» в TensorFlow?
  • Что такое объекты просмотра словаря?
  • Давайте будем гением компьютера.