首页 > 解决方案 > Pandas 将多个列分组并在其他列上排序

问题描述

我有一个数据框,其数据格式如下:

  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 视为一个集合,并根据最高股息(基于股息列)对这些集合进行排名。

我在想我可能必须平均股息列(每组)然后根据平均值排名(索引?)然后删除平均列(我不想看到这个)。

有人可以建议一些可以实现这一目标的代码吗?我查看了其他帖子,但对我没有任何帮助(由于我怀疑多个列的分组)。

标签: pythonpandassortingpandas-groupby

解决方案


首先按组添加平均股息系列:

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)

推荐阅读