首页 > 解决方案 > 如何根据索引对一组行数据框进行排名?

问题描述

我有一个看起来像这样的数据框:

df=

    a   b   c   d   e
0   1   1   0   1   1
1   0   0   0   1   1
2   0   0   0   0   0
3   1   1   1   0   0
4   0   0   0   0   0
5   1   1   1   1   1

我想创建另一列“排名”,将这个数据框每 4 行划分一次。

我正在寻找的结果

df=

    a   b   c   d   e result
0   1   1   0   1   1 0
1   0   0   0   1   1 0
2   0   0   0   0   0 0
3   1   1   1   0   0 0
4   0   0   0   0   0 1
5   1   1   1   1   1 1
.   .   .   .   .   . .
.   .   .   .   .   . .

我正在做的方式是:

我创建了一个列表并将该列表分成 6 组

seq=[i for i in range(0,len(df))]
nn=[seq[i:i+4] for i in range(0,len(seq),4)]

然后我创建了一个映射值的函数

def map(number):
    for i in range(0,len(df)):
        if number in nn[i]:
            return i

并使用地图。

df['rank']=df['index'].map(lambda x: map(x))

有没有更好的方法来做我想做的事情?我确定有更有效的方法吗?如果有人可以帮助我解决这个问题,我将不胜感激。

谢谢。

标签: pythonpython-3.xpandas

解决方案


怎么样:

df['rank'] = df.reset_index().index // 4

编辑以反映 Pault 的评论:如果您确定原始索引是从 0 开始的连续整数,则可以不使用reset_index(): df.index//4


推荐阅读