对多列进行分组,然后根据最大值查找唯一行

问题描述 投票:0回答:2

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

enter image description here

我希望得到的 df 看起来像:

enter image description here

python pandas
2个回答
0
投票

您可以使用 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

0
投票

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

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

给出:

   SN Category  Amount
0   1     Cat2    3000
1   2    Cat22    5000
© www.soinside.com 2019 - 2024. All rights reserved.