【问题标题】:Assign Column Value by fetching Max Value of Pandas Group Count通过获取 Pandas Group Count 的最大值来分配列值
【发布时间】:2017-11-04 12:35:28
【问题描述】:

我有以下数据框。

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

我需要获取每年列 Count 的最大值,并获取对应的 'Veh Type' 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

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

【问题讨论】:

  • 以下解决方案适用于单列 groupby。如果我需要对多列进行分组并获取结果,我该怎么办。需要帮助。

标签: python pandas group-by max


【解决方案1】:
  • df.groupby('Year').Count.idxmax() 为我提供了一系列方便的最大行数
  • 我可以在此使用 map 和类似系列 vt 的字典,以便在索引中获得一系列年份并在值中输入 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

【讨论】:

  • 感谢您的回复。有没有办法使用 groupby 函数来做到这一点?
  • @ceeka9388 解决方案中有一个 groupby。
  • 对不起,我的错。再次非常感谢。
  • 快速问题....当我尝试对多个列进行分组时,例如 df.assign(Max_Fleet=yr.map(df.groupby(['Year','Sector','Number']) ['Count'].idxmax().map(vt)))...我在 Max_Veh_type 列中遇到了 Nan...。我在这里有什么错误吗?
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2021-12-16
  • 1970-01-01
  • 2022-01-07
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多