代码之家  ›  专栏  ›  技术社区  ›  user2981194

对多列进行分组,然后根据最大[重复]找到唯一的行

  •  0
  • user2981194  · 技术社区  · 7 月前

    我有一个有3列的数据框,“供应商”、“类别”和“金额”。此df是分组操作的结果,我按供应商、类别分组,并求和金额。在许多情况下,每个供应商都有多行,他们使用不同的类别,每个类别的金额也不同。我希望对df进行过滤,以便只剩下每个供应商金额最大的类别。我曾尝试将其作为groupby的一部分来实现,但没有成功,我还遵循了教程,其中显示了如何使用.max()操作,但这会导致一行显示整个df中的最高数量。任何帮助都将不胜感激——我不能分享实际数据,但这里有一个df现在的样子的例子:

    enter image description here

    我希望得到的df是什么样子的:

    enter image description here

    2 回复  |  直到 7 月前
        1
  •  1
  •   rehaqds    7 月前

    您可以使用GroupBy中的信息对数据帧进行切片:

    g = df.groupby("SN")["Amount"].max()
    df = df.loc[df["SN"].isin(g.index) & df["Amount"].isin(g.values)].reset_index(drop=True)
    display(df)
    
        SN  Category    Amount
    0   1   Cat2        3000
    1   2   Cat22       5000
    
        2
  •  1
  •   user19077881    7 月前

    您可以直接获取最大行的索引,并使用它来选择这些行:

    df2 = df.iloc[df.groupby('SN')['Amount'].idxmax(),:].reset_index(drop = True)
    

    这给出了:

       SN Category  Amount
    0   1     Cat2    3000
    1   2    Cat22    5000