我想基于3个条件添加排名列:公司名称,品牌,年份。
这是我的原始数据:
CompanyName Brand Year
0 A Razer 2019
1 A SteelSeries 2019
2 A Logitech 2019
3 A Razer 2018
4 A SteelSeries 2018
5 B Logitech 2019
6 B Asus 2019
7 B Benq 2018
8 C Asus 2017
9 C Razer 2017
这是我想要的结果:(可能会让您感到困惑)
CompanyName Brand Year Rank
0 A Razer 2019 1
1 A SteelSeries 2019 2
2 A Logitech 2019 3
3 A Razer 2018 1
4 A SteelSeries 2018 2
5 B Logitech 2019 1
6 B Asus 2019 2
7 B Benq 2018 1
8 C Asus 2017 1
9 C Razer 2017 2
我尝试过的代码,但只会循环唯一的品牌:
df1 = pd.DataFrame()
for i,brands in enumerate(df['Brand'].unique):
df1.loc[i-1,'Rank'] = i
df1.loc[i-1, 'Brand']= brands
df = df.merge(df1,on='Brand',how='inner')
答案 0 :(得分:0)
请下次提供以下格式的文本数据框-
请查看How to make good reproducible pandas examples
CompanyName Brand Year
0 A Razer 2019
1 A SteelSeries 2019
2 A Logitech 2019
3 A Razer 2018
4 A SteelSeries 2018
5 B Logitech 2019
6 B Asus 2019
7 B Benq 2018
8 C Asus 2017
9 C Razer 2017
很简单,您可以按CompanyName
和Year
列进行分组并应用累积计数:
df['Rank'] = df.groupby(['CompanyName','Year']).cumcount()+1
print(df)
CompanyName Brand Year Rank
0 A Razer 2019 1
1 A SteelSeries 2019 2
2 A Logitech 2019 3
3 A Razer 2018 1
4 A SteelSeries 2018 2
5 B Logitech 2019 1
6 B Asus 2019 2
7 B Benq 2018 1
8 C Asus 2017 1
9 C Razer 2017 2