我有一个包含 3 列的数据框:“供应商”、“类别”和“金额”。该 df 是分组操作的结果,我按供应商、类别进行分组,并对金额进行求和。在许多情况下,每个供应商有多个行,他们使用不同的类别,并且每个类别的金额不同。我希望做的是过滤 df,以便仅保留每个供应商具有最大金额的类别。我尝试将其作为 groupby 的一部分来实现,但没有成功,我还遵循了教程,其中显示了使用 .max() 操作,但这会导致一行显示整个中的最高数量df。任何帮助将不胜感激 - 我无法分享实际数据,但这里是 df 现在的样子的示例:
我希望得到的 df 看起来像:
您可以使用 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
您可以直接获取最大行的索引并使用它来选择这些行:
df2 = df.iloc[df.groupby('SN')['Amount'].idxmax(),:].reset_index(drop = True)
给出:
SN Category Amount
0 1 Cat2 3000
1 2 Cat22 5000