numpy 关于标记排名问题

77 阅读1分钟

1.在DataFrame中创建一个新的列,用于标记品牌排名是否在前三

1.在DataFrame中创建一个新的列,用于标记每个品类下的品牌排名是否在前三

import pandas as pd
import numpy as np

# 创建 DataFrame
data = {
    'Category': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'],
    'Brand': ['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z', 'W'],
    'Amount': [100, 200, 150, 300, 250, 200, 180, 220, 200, 100]
}

df = pd.DataFrame(data)

# 标记品牌排名是否在前二
brand_ranking = df.groupby('Brand')['Amount'].sum().sort_values(ascending=False)
display(brand_ranking)
df['Brand_Ranking_Top_3'] = np.where(df['Brand'].isin(brand_ranking.head(2).index), 1, 0)

# 标记每个品类下的品牌排名是否在前一
df = df.sort_values(by=['Category', 'Brand'])
category_brand_ranking = df.groupby(['Category', 'Brand'])['Amount'].sum().groupby('Category').rank(method='dense', ascending=False)
display(category_brand_ranking)
df['Category_Brand_Ranking_Top_3'] = np.where(category_brand_ranking <= 1, 1, 0)

print(df)

两种情况输出结果为:

1.标记品牌排名是否在前二

1715238554282.png

2.标记每个品类下的品牌排名是否在前一

1715238600015.png