Pandas将Row分配给匹配行的索引

时间:2018-05-31 17:36:20

标签: python pandas dataframe pandas-groupby

给定pandas中的两列如何在A列中重复给出A列中匹配行的索引?

数据:

   A  B 
0  x  k
1  y  z 
2  z  y
3  k  x
4  x  nAn

输出:

   A  B 
0  3  k
1  2  z 
2  1  y
3  0  x
4  3  nAn

我已尝试循环遍历每一行并将A的行分配​​给B中匹配行的索引,但我觉得有一种更有效的方法可以做到这一点。

3 个答案:

答案 0 :(得分:3)

假设A中的值始终属于B中的某个值,您可以使用广播比较来提高性能:

df['A'] = (df.B.values == df.A[:, None]).argmax(1)
df
   A    B
0  3    k
1  2    z
2  1    y
3  0    x
4  3  nAn

答案 1 :(得分:3)

使用map

df.assign(A=df.A.map(dict(zip(df.B, df.index))))

   A    B
0  3    k
1  2    z
2  1    y
3  0    x
4  3  nAn

答案 2 :(得分:2)

使用Series.get

pd.Series(df.index,index=df.B).get(df.A)
Out[135]: 
A
x    3
y    2
z    1
k    0
x    3
dtype: int64

#df['A']=pd.Series(df.index,index=df.B).get(df.A).values