У меня есть фрейм данных с данными, отформатированными следующим образом:
Exchange Ticker Name Year Dividend_Cover_Ratio Dividend Net_Return
0 NYSE VZ VERIZON COMMUNICATIONS INC 2013 1.93 5.2% 41.69%
1 NYSE VZ VERIZON COMMUNICATIONS INC 2014 1.13 5.38% 14.79%
2 NYSE VZ VERIZON COMMUNICATIONS INC 2015 1.59 6.62% 24.74%
3 NYSE VZ VERIZON COMMUNICATIONS INC 2016 1.42 4.51% 28.7%
4 NYSE VZ VERIZON COMMUNICATIONS INC 2017 3.18 4.43% -1.81%
50 NYSE MCD MCDONALDS CORP 2013 1.79 3.66% 33.83%
51 NYSE MCD MCDONALDS CORP 2014 1.48 3.85% 14.03%
52 NYSE MCD MCDONALDS CORP 2015 1.40 3.1% 51.36%
53 NYSE MCD MCDONALDS CORP 2016 1.52 3.06% 11.34%
54 NYSE MCD MCDONALDS CORP 2017 1.68 2.24% 39.44%
Я бы хотел обработать Exchange, Ticker, Year в качестве набора и ранжировать эти наборы в соответствии с самым высоким дивидендом (на основе столбца дивидендов).
Я думаю, что мне, возможно, придется усреднить столбец дивидендов (за каждый набор), а затем ранг (индекс?) На основе среднего значения, а затем сбросить средний столбец (я не хочу этого видеть).
Может кто-нибудь предложить какой-то код, который бы достиг этого? Я смотрел на другие сообщения, но ничего не работало для меня (из-за группировки нескольких столбцов, которые я подозреваю).
Сначала добавьте среднюю группу дивидендов по группе:
df['Div_Grp_Avg'] = df.groupby(['Exchange', 'Ticker', 'Year'])['Dividend'].transform('mean')
Затем отсортируйте по этой новой серии:
df = df.sort_values('Div_Grp_Avg', ascending=False)
Наконец, оставьте вспомогательную колонку:
df = df.drop('Div_Grp_Avg', 1)