通过获取Pandas组计数的最大值来分配列值

时间:2017-06-03 04:00:53

标签: python pandas group-by max

我有以下数据框。

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

我需要每年获得列数的最大值,并获得相应的“车型”字样。列和并在" 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

我知道获取组中的最大值。任何帮助实现上述目标都会有很大的帮助。

1 个答案:

答案 0 :(得分:3)

  • df.groupby('Year').Count.idxmax()为我提供了一系列最大行出现的方便
  • 我可以使用map对类似系列vt的dict进行处理,以便在索引中获得一系列年份,并在值中获得Veh类型。
  • 然后使用它来映射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