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

时间:2019-05-11 02:21:41

标签: python pandas dataframe

我有一个由熊猫生成的数据框,如下:

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 个答案:

答案 0 :(得分: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)

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

收益

    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

答案 1 :(得分:1)

IIUC

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