python - 根据条件和唯一值添加排名列
问题描述
我想根据 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')
解决方案
下次请按以下格式提供文本数据框 -
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
推荐阅读
- c# - 创建 c# SelectList 不指定值
- mysql - 多个连接错误的 SUM 记录
- php - 按名字和姓氏自动完成搜索
- android - 与数据库相关的错误未在 android studio 中创建
- java - 解析页面中的所有元素时,Jsoup 没有获取少数元素的文本
- mysql - 或者在列中设置 Null 值
- ios - Swift 中包含 AWSAPIGatewayResponse 的单元测试方法
- android - 如何在Android中实现按行计算高度的网格?
- akka - akka演员有多可靠
- typescript - Rust WebAssembly 自定义元素内存释放错误