Панды: сумма значений в одном кадре данных, основанная на группе в другом кадре данных - PullRequest
4 голосов
/ 22 декабря 2019

У меня есть фрейм данных, в который входят компании с их секторами

  Symbol             Sector
0    MCM             Industrials
1    AFT             Health Care
2    ABV             Health Care
3    AMN             Health Care
4    ACN  Information Technology

У меня есть еще один фрейм данных, в котором содержатся компании с их позициями

  Symbol  Position
0    ABC  1864817
1    AAP -3298989
2    ABV -1556626
3    AXC  2436387
4    ABT   878535 

Я хочу получить фрейм данных, которыйсодержит совокупные позиции по секторам. Итак, суммируйте позиции всех компаний в данном секторе. Я могу сделать это индивидуально с помощью

df2[df2.Symbol.isin(df1.groupby('Sector').get_group('Industrials')['Symbol'].to_list())]  

Я ищу более эффективный подход панд, чтобы сделать это, а не зацикливаться на каждом секторе в group_by. Конечный фрейм данных должен выглядеть следующим образом:

     Sector                  Sum Position
0    Industrials             14567232
1    Health Care            -329173249
2    Information Technology -65742234
3    Energy                  6574352342
4    Pharma                  6342387658

Любая помощь приветствуется.

Ответы [ 3 ]

5 голосов
/ 22 декабря 2019

Вы можете map Столбец символа в сектор и использовать эту серию для группировки.

df2.groupby(df2.Symbol.map(df1.set_index('Symbol').Sector)).Position.sum()
5 голосов
/ 22 декабря 2019

Если я правильно понял вопрос, один из способов сделать это - объединить оба фрейма данных, а затем сгруппировать их по секторам и суммировать столбец позиции, например:

df_agg = df1.join(df2['Position']).drop('Symbol', axis=1)
df_agg.groupby('Sector').sum()

Где df1 - это df сСекторы и DF2 это DF с позициями.

4 голосов
/ 22 декабря 2019

давайте просто сделаем merge

df2.merge(df1,how='left').groupby('Sector').Position.sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...