Cambiar un valor de columna de DataFrame de pandas basado en otro valor de columna

Tengo un dataframe con dos columnas, cada una de las cuales representa un organismo. Se llaman ORG1 y ORG2 Quiero mover los valores de ORG2 a ORG1 para el valor de índice correspondiente.

Entonces, si ORG1 es ‘A’ y ORG2 es ‘B’ quiero que ORG1 tome el valor ‘B’ de ORG2.

Ya empecé a trabajar para identificar los índices de los organismos ORG2 que quiero mover, de la siguiente manera:

def move_org2(x): org2_matches = Series(x.ORG2.str.count("ESBL")) return x.ix[org2_matches == 1] org2_DF = move_org2(DF) org2_DF.ORG2.index 

¿Cuál es la mejor manera de usar esto para cambiar los valores ORG1 con los valores en los índices ORG2 correspondientes?

 In [13]: df Out[13]: ORG1 ORG2 0 A ESBL 1 BP 2 CQ 3 DR 4 E ESBL In [14]: cond = df.ORG2 == 'ESBL' In [15]: df.ORG1[cond] = df.ORG2[cond] In [16]: df Out[16]: ORG1 ORG2 0 ESBL ESBL 1 BP 2 CQ 3 DR 4 ESBL ESBL 

En otras palabras, usando .loc harías

 In [2008]: df Out[2008]: ORG1 ORG2 0 A ESBL 1 BP 2 CQ 3 DR 4 E ESBL In [2009]: df.loc[df['ORG2'] == 'ESBL', 'ORG1'] = df['ORG2'] In [2010]: df Out[2010]: ORG1 ORG2 0 ESBL ESBL 1 BP 2 CQ 3 DR 4 ESBL ESBL 

O, si necesita una copia, sin modificar la df original, puede usar .mask()

 In [2016]: df.mask(df['ORG2'] == 'ESBL', df['ORG2'], axis=0) Out[2016]: ORG1 ORG2 0 ESBL ESBL 1 BP 2 CQ 3 DR 4 ESBL ESBL