O motivo pelo qual seu dataframe original não é atualizado é porque a indexação encadeada pode fazer com que você modifique uma cópia em vez de uma exibição de seu dataframe. Os documentos dão este conselho:
Ao definir valores em um objeto pandas, deve-se tomar cuidado para evitar o que é chamado de indexação em cadeia.
Você tem algumas alternativas: -
loc
+ Indexação booleana
loc
pode ser usado para definir valores e oferece suporte a máscaras booleanas:
df.loc[df['my_channel'] > 20000, 'my_channel'] = 0
mask
+ Indexação booleana
Você pode atribuir à sua série:
df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)
Ou você pode atualizar sua série no local:
df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)
np.where
+ Indexação booleana
Você pode usar o NumPy atribuindo sua série original quando sua condição não for satisfeita; entretanto, as duas primeiras soluções são mais limpas, pois alteram explicitamente apenas os valores especificados.
df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])