我正在处理一个csv文件,我想添加一个排名列,当name
列的值不同时,该列将重置。这是我的原始代码:
import pandas as pd
l = [{'sku': 'WD-0215', 'name': 'Sofa', 'price': '$1,299.00'},
{'sku': 'WD-1345', 'name': 'Sofa', 'price': '$1,399.00'},
{'sku': 'WD-0416', 'name': 'Sofa', 'price': '$1,199.00'},
{'sku': 'sfr20', 'name': 'TV', 'price': '$1,861.00'},
{'sku': 'sfr40', 'name': 'TV', 'price': '$1,561.00'},
{'sku': 'sfr30', 'name': 'TV', 'price': '$1,961.00'}
]
df = pd.DataFrame(l)
df["rank"]=""
for i in range(len(df.values)):
df.iloc[i,3]=i+1
i+=1
df
这将创建具有从1到6的值的CCD_ 2列,但我的预期输出应该是这样的:
sku name price rank
WD-0215 Sofa $1299.00 1
WD-1345 Sofa $1399.00 2
WD-0416 Sofa $1199.00 3
sfr20 TV $1861.00 1
sfr40 TV $1561.00 2
sfr30 TV $1961.00 3
您可以将groupby
与cumcount
一起使用,以获得name
:的每个值的累积计数
df['rank'] = df.groupby('name').cumcount() + 1
结果:
sku name price rank
0 WD-0215 Sofa $1,299.00 1
1 WD-1345 Sofa $1,399.00 2
2 WD-0416 Sofa $1,199.00 3
3 sfr20 TV $1,861.00 1
4 sfr40 TV $1,561.00 2
5 sfr30 TV $1,961.00 3