熊猫将多列按设置分组并按其他列排序

时间:2018-06-23 13:35:40

标签: python pandas sorting pandas-groupby

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

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

我想我可能必须对股息列(每组)求平均,然后根据平均值对排名(指数进行排序),然后再取平均值列(我不想看到这一点)。

有人可以建议一些实现此目的的代码吗?我看过其他文章,但对我没有任何帮助(由于我怀疑是对多列进行分组)。

1 个答案:

答案 0 :(得分:1)

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

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)