使用一致的映射分解数据框列中的值

Gab*_* F. 5 python categories dataframe pandas

如何使用factorize跨两列存在的值的熊猫?

具体来说,我试图将存在于两列中的值转换为数值,并将相应的分解值放入新列中,以便分解与两个输入列“A”和“B”一致。

现有数据帧:

     A   B
0    a   b
1    c   a
2    d   a
3    e   c
4    c   b
5    b   e
6    e   f
Run Code Online (Sandbox Code Playgroud)

期望输出:

     A   B   A_ID  B_ID 
0    a   b     0     4
1    c   a     1     0
2    d   a     2     0
3    e   c     3     1
4    c   b     1     4
5    b   e     4     3
6    e   f     3     5
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法factorize成功地用于一列:

df['A_ID'] = pd.factorize(df.A)[0]
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过跨两列的值的一致映射来实现这一点?我是否需要求助于使用自定义lambda函数,或者有没有办法用它来完成factorize

cs9*_*s95 5

pd.factorize, apply+ pd.Categorical:

_, b = pd.factorize(df.values.T.reshape(-1, ))  
                           # or df.values.ravel('F'), as suggested by Zero
r = df.apply(lambda x: pd.Categorical(x, b).codes).add_suffix('_ID')

   A_ID  B_ID
0     0     4
1     1     0
2     2     0
3     3     1
4     1     4
5     4     3
6     3     5

pd.concat([df, r], 1)

   A  B  A_ID  B_ID
0  a  b     0     4
1  c  a     1     0
2  d  a     2     0
3  e  c     3     1
4  c  b     1     4
5  b  e     4     3
6  e  f     3     5
Run Code Online (Sandbox Code Playgroud)