pandas如何将一列数据转换为另一列?

3

我有一个由Pandas生成的数据框,如下所示:

NO  CODE
1   a
2   a
3   a
4   a
5   a
6   a
7   b
8   b
9   a
10  a
11  a
12  a
13  b
14  a
15  a
16  a

我希望将CODE列的数据转换为NUM列。编码规则如下:

NO CODE NUM
1   a   1
2   a   2
3   a   3
4   a   4
5   a   5
6   a   6
7   b   b
8   b   b
9   a   1
10  a   2
11  a   3
12  a   4
13  b   b
14  a   1
15  a   2
16  a   3

谢谢!

2个回答

2

尝试:

a_group = df.CODE.eq('a')

df['NUM'] = np.where(a_group, 
                     df.groupby(a_group.ne(a_group.shift()).cumsum())
                       .CODE.cumcount()+1, 
                     df.CODE)

on

df = pd.DataFrame({'CODE':list('baaaaaabbaaaabbaa')})

yields

    CODE    NUM
--  ------  -----
 0  b       b
 1  a       1
 2  a       2
 3  a       3
 4  a       4
 5  a       5
 6  a       6
 7  b       b
 8  b       b
 9  a       1
10  a       2
11  a       3
12  a       4
13  b       b
14  b       b
15  a       1
16  a       2

@WeNYoBen ALollz 指出我的原始答案如果序列以 b 开头是不正确的。所以我进行了修正并加上了 b 作为证据 :-) - Quang Hoang
@QuangHoang 好的,好的,说得对。 - BENY

1
我理解了。
s=df.CODE.eq('b').cumsum()
df['NUM']=df.CODE.where(df.CODE.eq('b'),s[~df.CODE.eq('b')].groupby(s).cumcount()+1)
df
Out[514]: 
    NO CODE NUM
0    1    a   1
1    2    a   2
2    3    a   3
3    4    a   4
4    5    a   5
5    6    a   6
6    7    b   b
7    8    b   b
8    9    a   1
9   10    a   2
10  11    a   3
11  12    a   4
12  13    b   b
13  14    a   1
14  15    a   2
15  16    a   3

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