Pandas, set_index groupby rolling

#python #pandas

#python #pandas

Вопрос:

Я хотел бы получить среднее значение за 2 года на отраслевом уровне для временных рядов следующим образом:

     firm industry year roe
    A agri 1992 0.05
    B agri 1992 0.065
    A agri 1993 0.055
    B agri 1993 0.07
    C tech 1992 0.10
    D tech 1992 0.11
    C tech 1993 0.11
    D tech 1993 0.12
 

Результат не такой, как ожидалось

 df.set_index('year').groupby('industry')['roe'].rolling(window=2).mean()
 
 industry  year
agri      1992       NaN
          1992    0.0575
          1993    0.0600
          1993    0.0625
tech      1992       NaN
          1992    0.1050
          1993    0.1100
          1993    0.1150
 

я ожидаю, что для agri 1992 я ожидаю nan , потому что я хочу скользящее окно по году внутри отраслевой группы, а не на уровне фирмы (n наблюдений). Как мне это сделать, в идеале без форматирования year как объекта datetime?

Обновить

Pandas в основном игнорирует / дважды подсчитывает повторяющийся индекс в операции прокрутки для вычисления окна. В данном случае это две записи уровня фирмы за 1992 год в рамках industry agri, которые, похоже, уже учитываются как окно «2», но на самом деле это всего лишь один год, и поэтому их следует учитывать как окно «1».

TL; DR Pandas должен создавать скользящее среднее значение на основе окна с уникальным количеством в индексе, а не обычного количества, приводящего в этом случае к эффективному окну в 1 год вместо 2.

Ответ №1:

Из вашего объяснения вам нужно окно 3? Пожалуйста, попробуйте. df.set_index('year').groupby(['industry'])['roe'].rolling(window=3).mean().to_frame('mean')

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

1. привет, wwnde, нет, я думаю, вы неправильно поняли мой вопрос. Я хотел бы видеть окно по всем наблюдениям в одной и той же отраслевой группе за последние 2 года. Я также пытался использовать min_periods=2, но я получаю тот же результат. Я вообще не должен видеть среднее значение за 1992 год, потому что это первый год. Pandas предполагает, что, учитывая, что в 1992 году было 2 фирмы (obs), у нас есть достаточный диапазон для окна 2. Но это неверно, потому что это всего 1 год, а не 2.

2. Pandas в основном игнорирует / дважды подсчитывает повторяющийся индекс в операции прокрутки для вычисления окна. В данном случае это две записи 1992 года, например, в industry agri.