Pandas:如何根据特定的值分配组号?

3

数据帧

pd.DataFrame({'a': range(20)})

>>  
    a
0   0
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10  10
11  11
12  12
13  13
14  14
15  15
16  16
17  17
18  18
19  19

预期结果:

    a   group_num
0   0   1
1   1   1
2   2   2
3   3   2
4   4   3
5   5   3
6   6   4
7   7   4
8   8   5
9   9   5
10  10  6
11  11  6
12  12  7
13  13  7
14  14  8
15  15  8
16  16  9
17  17  9
18  18  10
19  19  10

我想做的是根据值分配组号,从1到9。

思路是对这些值进行排序,分成10组,并为每组分配从1到9的编号。

但不知道如何在Pandas中实现。

需要您的帮助。


你能给我们提供一个我们可以处理的用例吗?例如,一个带有测试数据集和预期输出的示例? - 131
这太笼统了。请展示一个期望的输出和你已经尝试过的内容。 - rafaelc
1
请查看pandas.qcut - ALollz
3个回答

5

我认为需要使用qcut函数来实现等大小的区间:

df['b'] = pd.qcut(df['a'], 10, labels=range(1, 11))
print (df)
     a   b
0    0   1
1    1   1
2    2   2
3    3   2
4    4   3
5    5   3
6    6   4
7    7   4
8    8   5
9    9   5
10  10   6
11  11   6
12  12   7
13  13   7
14  14   8
15  15   8
16  16   9
17  17   9
18  18  10
19  19  10

1

如果你想创建2人组,可以使用以下代码:

df['b'] = df['a'].floordiv(2)+1

1
你可以使用//
df['G']=df.a//2+1
df
Out[609]: 
     a   G
0    0   1
1    1   1
2    2   2
3    3   2
4    4   3
5    5   3
6    6   4
7    7   4
8    8   5
9    9   5
10  10   6
11  11   6
12  12   7
13  13   7
14  14   8
15  15   8
16  16   9
17  17   9
18  18  10
19  19  10

这个仅适用于特定情况。 - user3595632

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接