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.标记品牌排名是否在前二
2.标记每个品类下的品牌排名是否在前一