如何从列表列表中读取信息并将详细信息添加到熊猫数据框

时间:2019-04-16 16:12:51

标签: pandas

我有一个列表列表,如下所示。

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

在熊猫中有什么简单的方法吗?

很高兴在需要时提供更多详细信息。

2 个答案:

答案 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