2017-06-03 71 views
1

我有以下数据框。通过获取大熊猫组计数的最大值来分配列值

Year Sector Number  Veh Types Month Count 
2015 AA  173   F   Apr  277 
2015 AA  173   F   Aug  277 
2015 AA  173   F   Dec  277 
2015 AA  173   F   Feb  277 
2015 AA  173   F   Jul  277 
2015 AA  173   F   Jun  277 
2015 AA  173   F   Mar  277 
2015 AA  173   G   Feb  82 
2015 AA  173   G   Jan  82 
2015 AA  173   G   Mar  82 
2016 AA  173   A   Apr  277 
2016 AA  173   A   Aug  277 
2016 AA  173   A   Dec  277 
2016 AA  173   A   Feb  277 
2016 AA  173   A   Jul  277 
2016 AA  173   A   Jun  277 
2016 AA  173   A   Mar  277 
2016 AA  173   A   May  277 
2016 AA  173   F   Nov  277 
2016 AA  173   F   Oct  277 
2016 AA  173   F   Sep  277 
2016 AA  173   G   Feb  82 
2016 AA  173   G   Jan  82 
2016 AA  173   G   Mar  82 

我需要得到列的最大值每年数,并得到相应的“辆类型” Columnn并在各组中的“Max_Veh_Type”列分配。

我的预期成果是:

Year Sector Number  Veh Types Month Count Max_Veh_type  
2015 AA  173   F   Apr  277  F 
2015 AA  173   F   Aug  277  F  
2015 AA  173   F   Dec  277  F 
2015 AA  173   F   Feb  277  F 
2015 AA  173   F   Jul  277  F 
2015 AA  173   F   Jun  277  F 
2015 AA  173   F   Mar  277  F 
2015 AA  173   G   Feb  82  F 
2015 AA  173   G   Jan  82  F 
2015 AA  173   G   Mar  82  F 
2016 AA  173   A   Apr  277  A 
2016 AA  173   A   Aug  277  A 
2016 AA  173   A   Dec  277  A  
2016 AA  173   A   Feb  277  A 
2016 AA  173   A   Jul  277  A 
2016 AA  173   A   Jun  277  A 
2016 AA  173   A   Mar  277  A 
2016 AA  173   A   May  277  A 
2016 AA  173   F   Nov  277  A 
2016 AA  173   F   Oct  277  A 
2016 AA  173   F   Sep  277  A 
2016 AA  173   G   Feb  82  A 
2016 AA  173   G   Jan  82  A 
2016 AA  173   G   Mar  82  A 

我知道一组中获得最大的价值。任何帮助实现上述将是很大的帮助。

+0

以下解决方案适用于单个列GROUPBY。如果我需要groupby multiplle列并获取结果,我该怎么办?需要帮助。 – ceeka9388

回答

2
  • df.groupby('Year').Count.idxmax()让我一个方便的系列赛里的最大行发生
  • 我可以为了得到一系列的年中值指数和VEH类型在此使用map与像系列vt的字典。
  • 然后用这个地图上的yr系列,以获得列,我们希望
  • 使用assign创建一个新的列

vt, yr = df['Veh Types'], df['Year'] 
df.assign(Max_Veh_Type=yr.map(df.groupby('Year').Count.idxmax().map(vt))) 

    Year Sector Number Veh Types Month Count Max_Veh_Type 
0 2015  AA  173   F Apr 277   F 
1 2015  AA  173   F Aug 277   F 
2 2015  AA  173   F Dec 277   F 
3 2015  AA  173   F Feb 277   F 
4 2015  AA  173   F Jul 277   F 
5 2015  AA  173   F Jun 277   F 
6 2015  AA  173   F Mar 277   F 
7 2015  AA  173   G Feb  82   F 
8 2015  AA  173   G Jan  82   F 
9 2015  AA  173   G Mar  82   F 
10 2016  AA  173   A Apr 277   A 
11 2016  AA  173   A Aug 277   A 
12 2016  AA  173   A Dec 277   A 
13 2016  AA  173   A Feb 277   A 
14 2016  AA  173   A Jul 277   A 
15 2016  AA  173   A Jun 277   A 
16 2016  AA  173   A Mar 277   A 
17 2016  AA  173   A May 277   A 
18 2016  AA  173   F Nov 277   A 
19 2016  AA  173   F Oct 277   A 
20 2016  AA  173   F Sep 277   A 
21 2016  AA  173   G Feb  82   A 
22 2016  AA  173   G Jan  82   A 
23 2016  AA  173   G Mar  82   A 
+0

感谢您的回复。有没有办法使用groupby函数来做到这一点? – ceeka9388

+0

@ ceeka9388在解决方案中有一个groupby。 – piRSquared

+0

对不起我的坏。再次感谢。 – ceeka9388