我有以下数据框,我按points列排序:
name points
0 vanessa 8.6
3 james 8.3
2 mike 7.2
1 mark 6.3
4 charles 5.5
我尝试使用以下方法创建具有排名的新列:
df['rank']=pd.Series(tuple(range(1,6)))
我得到:
name points rank
0 vanessa 8.6 1
3 james 8.3 4
2 mike 7.2 3
1 mark 6.3 2
4 charles 5.5 5
这不是我想要的。我使用df.rank()解决了这个问题:
df['rank']=df.points.rank(ascending=False).astype(int)
然后我得到:
name points rank
0 vanessa 8.6 1
3 james 8.3 2
2 mike 7.2 3
1 mark 6.3 4
4 charles 5.5 5
问题是:
为什么我第一次使用df['rank']=pd.Series(tuple(range(1,6)))
的尝试没有成功
问题是如果在
Series
中没有指定索引,则创建默认的RangeIndex
-0,1,2,..len(df)
解决方案是添加参数
index
以将数据与原始数据匹配:pd.Series(…)生成自己的从0到4(包括0到4)的索引
您实际上是根据此索引分配的。 您可以只传递一个简单的值列表(长度正确,等于len(df)),而不是pd.系列
问题是因为序列根据索引值分配值。使用
df['rank']=pd.Series(tuple(range(1,6)))
时,将根据索引分配值。检查您的输出:您可以使用
reset_index()
后跟一个set_index()
来进行轮换:相关问题 更多 >
编程相关推荐