Причина, по которой ваш исходный фрейм данных не обновляется, заключается в том, что цепное индексирование может привести к изменению копии, а не представления вашего фрейма данных. В документах дают такой совет:
При установке значений в объекте pandas необходимо соблюдать осторожность, чтобы избежать того, что называется цепной индексацией.
У вас есть несколько альтернатив: -
loc
+ Булево индексирование
loc
может использоваться для установки значений и поддерживает логические маски:
df.loc[df['my_channel'] > 20000, 'my_channel'] = 0
mask
+ Булево индексирование
Вы можете назначить своей серии:
df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)
Или вы можете обновить свою серию на месте:
df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)
np.where
+ Булево индексирование
Вы можете использовать NumPy, назначив исходную серию, когда ваше условие не выполняется; однако первые два решения более чистые, поскольку они явно изменяют только указанные значения.
df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])