кадр данных pandas, повторяющийся над 2 индексными переменными - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть фрейм данных с двумя индексами, называемыми «ДАТА» (это месячные данные) и «ИД», и переменная столбца с именем «Объем». Теперь я хочу перебрать его и заполнить для каждого уникального идентификатора новый столбец средним значением столбца Volume в новом столбце.

Основная идея состоит в том, чтобы выяснить, какие месяцы превышают среднегодовое значение для каждого удостоверения личности.

list(df.index)

(Timestamp('1970-09-30 00:00:00'), 12167.0)

print(df.index.name)

None

Мне кажется, я не нашел учебник, чтобы решить эту проблему: (

Может кто-нибудь, пожалуйста, укажите мне в правильном направлении

                    SHRCD  EXCHCD   SICCD     PRC     VOL       RET    SHROUT  \
DATE       PERMNO                                                               
1970-08-31 10559.0   10.0     1.0  5311.0  35.000  1692.0  0.030657   12048.0   
           12626.0   10.0     1.0  5411.0  46.250   926.0  0.088235    6624.0   
           12749.0   11.0     1.0  5331.0  45.500  5632.0  0.126173   34685.0   
           13100.0   11.0     1.0  5311.0  22.000  1759.0  0.171242   15107.0   
           13653.0   10.0     1.0  5311.0  13.125   141.0  0.220930    1337.0   
           13936.0   11.0     1.0  2331.0  11.500   270.0 -0.053061    3942.0   
           14322.0   11.0     1.0  5311.0  64.750  6934.0  0.024409  154187.0   
           16969.0   10.0     1.0  5311.0  42.875  1069.0  0.186851   13828.0   
           17072.0   10.0     1.0  5311.0  14.750   777.0  0.026087    5415.0   
           17304.0   10.0     1.0  5311.0  24.875  1939.0  0.058511    8150.0 

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете использовать transform с year для серии такого же размера, как оригинал DataFrame:

print (df)
                    VOL
DATE       PERMNO      
1970-08-31 10559.0    1
           10559.0    2
           12749.0    3
1971-08-31 13100.0    4
           13100.0    5

df['avg'] = df.groupby([df.index.get_level_values(0).year, 'PERMNO'])['VOL'].transform('mean')
print (df)
                    VOL  avg
DATE       PERMNO           
1970-08-31 10559.0    1  1.5
           10559.0    2  1.5
           12749.0    3  3.0
1971-08-31 13100.0    4  4.5
           13100.0    5  4.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...