A     B       C
0  mel  0.00    3.99
1  sid  7.23   13.30
2  alc  0.00    2.14
3  fas  8.12  108.00

Quiero convertir 0.00 valores en sus respectivos valores de columna C .

La salida debe ser:

     A     B       C
0  mel  3.99    3.99
1  sid  7.23   13.30
2  alc  2.14    2.14
3  fas  8.12  108.00

He intentado:

df.replace(["0.00"], ["C"])
0
Tie_24 27 feb. 2018 a las 00:00

4 respuestas

La mejor respuesta

De otra manera:

Obtenga los índices de las filas que desea llenar. Luego reemplace esos valores:

idx = df["B"] == 0
df.loc[idx, "B"] = df.loc[idx, "C"]
print(df)
#     A     B       C
#0  mel  3.99    3.99
#1  sid  7.23   13.30
#2  alc  2.14    2.14
#3  fas  8.12  108.00

Podrías hacer esto de una sola vez, pero pongo que lo escribí así para mayor claridad.

1
pault 26 feb. 2018 a las 21:07

De una sola mano:

df.loc[df['B'].eq(0), 'B'] = df['C']

Resultado:

     A     B       C
0  mel  3.99    3.99
1  sid  7.23   13.30
2  alc  2.14    2.14
3  fas  8.12  108.00
0
jpp 26 feb. 2018 a las 21:13

replace + bfill

df.replace(0,np.nan).bfill(1)
Out[2049]: 
     A     B     C
0  mel  3.99  3.99
1  sid  7.23  13.3
2  alc  2.14  2.14
3  fas  8.12   108

O

df.loc[df.B==0,'B']=df.C
df
Out[2052]: 
     A     B       C
0  mel  3.99    3.99
1  sid  7.23   13.30
2  alc  2.14    2.14
3  fas  8.12  108.00
2
YOBEN_S 26 feb. 2018 a las 21:02

Otro trazador de líneas:

df['D'] = df.C.combine_first(df.B)
0
YOLO 26 feb. 2018 a las 21:20