如何根据索引对行数据框组进行排序?

时间:2019-04-12 19:50:13

标签: python python-3.x pandas

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

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

我想创建另一个列“ rank”,该列每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))

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

谢谢。

2 个答案:

答案 0 :(得分:3)

怎么样:

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

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

答案 1 :(得分:0)

使用np.repeat

result = np.repeat(range(4), 4)[:len(df)]
df['result'] = result

print(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