La razón por la que su marco de datos original no se actualiza es porque la indexación encadenada puede hacer que modifique una copia en lugar de una vista de su marco de datos. Los médicos dan este consejo:
Al establecer valores en un objeto pandas, se debe tener cuidado para evitar lo que se denomina indexación encadenada.
Tiene algunas alternativas: -
loc
+ Indexación booleana
loc
se puede utilizar para establecer valores y admite máscaras booleanas:
df.loc[df['my_channel'] > 20000, 'my_channel'] = 0
mask
+ Indexación booleana
Puedes asignar a tu serie:
df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)
O puede actualizar su serie en su lugar:
df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)
np.where
+ Indexación booleana
Usted puede utilizar NumPy mediante la asignación de su serie original cuando su condición es no satisfecha; sin embargo, las dos primeras soluciones son más limpias ya que cambian explícitamente solo valores especificados.
df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])