Метод query
, как видно из его названия, предназначен для запроса к фрейму данных , , а не для установки значений .
Таким образом, loc
вполне уместно, отметив, что вы можете присвоить серии строку:
df.loc[df.a == 1, 'a'] = 2
Более идиоматическим может быть использование pd.Series.mask
, которое вы даже можете использовать на месте:
df['a'].mask(df['a'] == 1, 2, inplace=True)
Вы должны рассматривать «сцепление методов» как средство для достижения цели , а не само требование или цель. Если вы используете цепочку методов, вы можете использовать pd.DataFrame.assign
:
df = df.assign(a=df['a'].mask(df['a'] == 1, 2))
В качестве изолированной операции я считаю это менее читабельным. Но вы можете найти это полезным с несколькими связанными операциями через цепочку методов.