如何用Pandas筛选按Rank总和排名前4的品牌+指定品牌X
解决方案:用Pandas筛选目标品牌
嘿,这需求很清晰,咱们用Pandas几步就能搞定!下面是具体的实现步骤和代码:
步骤1:计算每个品牌的Rank总和
首先我们需要按品牌分组,计算每个品牌所有产品的Rank总和:
import pandas as pd # 假设你的数据集已经读入为df # 示例数据(可替换为你的真实数据) data = [ ["A", "P1", 1000], ["A", "P2", 1210], ["A", "P3", 2000], ["A", "P4", 600], ["A", "P5", 756], ["A", "P6", 867], ["B", "P1", 549], ["B", "P2", 1572], ["B", "P3", 3490], ["B", "P4", 2341], ["B", "P5", 431], ["B", "P6", 321], ["C", "P1", 421], ["C", "P2", 121], ["C", "P3", 805], ["C", "P4", 1202], ["C", "P5", 4032], ["C", "P6", 432] ] df = pd.DataFrame(data, columns=["Brand", "Product", "Rank"]) # 计算各品牌Rank总和 brand_rank_totals = df.groupby("Brand")["Rank"].sum().reset_index()
步骤2:提取Rank总和排名前4的品牌
用nlargest方法直接获取总和最高的前4个品牌:
# 获取前4名品牌的列表 top_4_brands = brand_rank_totals.nlargest(4, "Rank")["Brand"].tolist()
步骤3:加入你的目标品牌"X"
把你代表的品牌"X"加入到目标列表里,如果担心"X"已经在前4名中(避免重复),可以用集合去重:
# 加入品牌X,可选去重 target_brands = top_4_brands + ["X"] # 如果需要去重,用下面这行: # target_brands = list(set(top_4_brands + ["X"]))
步骤4:筛选原数据中的目标品牌
最后用isin方法筛选出所有目标品牌的数据:
# 筛选出目标品牌的所有行 filtered_df = df[df["Brand"].isin(target_brands)]
额外提示
- 如果品牌"X"不在你的原始数据集中,
filtered_df只会包含前4名品牌的数据,不会报错; - 如果你需要保留品牌的排名顺序(前4+X),可以用
Categorical类型来指定顺序,避免筛选后顺序混乱:filtered_df["Brand"] = pd.Categorical(filtered_df["Brand"], categories=target_brands, ordered=True) filtered_df = filtered_df.sort_values("Brand")
内容的提问来源于stack exchange,提问作者Dys_Lexi_A
相关产品推荐
相关产品推荐

