Рассчитать средневзвешенное значение на основе 2 столбцов, используя pandas / dataframe - PullRequest
1 голос
/ 08 апреля 2019

У меня есть следующий кадр данных df.Я хочу рассчитать средневзвешенное значение, сгруппированное по каждой дате и уровню сектора

 date     Equity    value    Sector   Weight
2000-01-31  TLRA    20      RG Index     0.20
2000-02-28  TLRA    30      RG Index     0.20
2000-03-31  TLRA    40      RG Index     0.20
2000-01-31   RA     50      RG Index     0.30
2000-02-28   RA     60      RG Index     0.30
2000-03-31   RA     70      RG Index     0.30
2000-01-31  AAPL    80      SA Index     0.50
2000-02-28  AAPL    90      SA Index     0.50
2000-03-31  AAPL    100     SA Index     0.50
2000-01-31  SPL     110     SA Index     0.60
2000-02-28  SPL     120     SA Index     0.60
2000-03-31  SPL     130     SA Index     0.60

. Может быть много Equity при значении Sector.Мне нужен средневзвешенный уровень по секторам, основанный на столбце «Вес».

Ожидаемый результат:

date        RG Index       SA Index
2000-01-31  19               106  
2000-02-28  24               117
2000-03-31  29               138 

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

g = df.groupby('Sector')
df['wa'] = df.value / g.value.transform("sum") * df.Weight
df.pivot(index='Sector', values='wa')

1 Ответ

3 голосов
/ 08 апреля 2019

Больше похоже на pivot сначала проблема assign новые столбцы как продукт value и weight

df.assign(V=df.value*df.Weight).pivot_table(index='date',columns='Sector',values='V',aggfunc='sum')
Out[328]: 
Sector      RGIndex  SAIndex
date                        
2000-01-31     19.0    106.0
2000-02-28     24.0    117.0
2000-03-31     29.0    128.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...