我有一个列表列表,如下所示。
ratings = [['item1', 0.95], ['item5', 0.99], ['item3', 0.3]]
我还有一个如下的pandas数据框。
item price
item1 350
item2 678
item3 888
item4 386
item5 1000
item6 85
现在,我想将ratings
详细信息添加到上述数据框中,并获得仅具有如下评分的数据框。
item price ratings
item1 350 0.95
item3 888 0.3
item5 1000 0.99
我觉得可以使用isin()
来完成此操作,但不确定如何在lists of list
中使用它。
最后,我想要另一个数据框,该数据框基于如下的排名对项目进行排名。
item price ratings rankings
item1 350 0.95 2
item3 888 0.3 3
item5 1000 0.99 1
在熊猫中有什么简单的方法吗?
很高兴在需要时提供更多详细信息。
答案 0 :(得分:2)
我将列表转换为df并合并:
ratings = [['item1', 0.95], ['item5', 0.99], ['item3', 0.3]]
df1=pd.DataFrame(ratings,columns=['item','ratings'])
df=df.merge(df1,on=['item'])
df['ranks']=df.ratings.rank(method='dense')
#df['ranks']=df.ratings.rank(method='dense',ascending=False) for reverse rank
print(df)
item price ratings ranks
0 item1 350 0.95 2.0
1 item3 888 0.30 1.0
2 item5 1000 0.99 3.0
答案 1 :(得分:2)
您可以map
:
d = {k: v for k, v in ratings}
u = df.assign(ratings=df.item.map(d)).dropna()
item price ratings
0 item1 350 0.95
2 item3 888 0.30
4 item5 1000 0.99
然后rank
u.assign(rankings=u.ratings.rank(ascending=False))
item price ratings rankings
0 item1 350 0.95 2.0
2 item3 888 0.30 3.0
4 item5 1000 0.99 1.0