考虑以下预先订购的数据帧
import pandas as pd
df = pd.DataFrame({'Item':['Hat','Necklace','Bag','Bag','Necklace','Hat','Hat','Bag','Bag']})
我想在不影响数据帧的当前顺序的情况下对 Item
列进行密集排名。
即
我试过使用
df['bad_rank'] = df['Item'].rank(ascending=False, method='dense').astype(int)
然而,这不是我想要的,因为“帽子”排在第二位,应该排在第一位。
我也编写了一个肮脏的答案,但我很惊讶没有使用排名方法的更简单方法。
ordered_rank = dict(zip(df['Item'].unique(), range(1,len(df['Item'].unique())+1)))
df['good_rank'] = df['Item'].map(ordered_rank)
有人愿意帮我吗?