Pandas Assign Row для индекса соответствующей строки - PullRequest
0 голосов
/ 31 мая 2018

Учитывая два столбца в пандах, как я могу присвоить строку столбца A индексу совпадающей строки в столбце B, учитывая повторения в столбце 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 голосов
/ 31 мая 2018

Предполагая, что значения в 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
0 голосов
/ 31 мая 2018

Использование 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
0 голосов
/ 31 мая 2018

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...