Причина, по якій ваш оригінальний фрейм даних не оновлюється, полягає в тому, що ланцюгова індексація може призвести до зміни копії, а не перегляду вашого фрейму даних. У документах дають таку пораду:
Встановлюючи значення в об'єкті панди, слід бути обережним, щоб уникнути того, що називається ланцюговим індексуванням.
У вас є кілька альтернатив: -
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'])