Итак, я хотел бы сделать фрагмент фрейма данных, а затем установить значение первого элемента в этом фрагменте без копирования фрейма данных. Например:
df = pandas.DataFrame(numpy.random.rand(3,1))
df[df[0]>0][0] = 0
Срез здесь не имеет значения и предназначен только для примера и снова вернет весь фрейм данных. Дело в том, что, делая это так, как в примере, вы получаете настройку с предупреждением о копировании (понятно). Я также пробовал сначала нарезать, а затем использовать ILOC/IX/LOC и дважды использовать ILOC, то есть что-то вроде:
df.iloc[df[0]>0,:][0] = 0
df[df[0]>0,:].iloc[0] = 0
И ни то, ни другое не работает. Опять же, я не хочу делать копию фрейма данных, даже если он имеет только нарезанную версию.
РЕДАКТИРОВАТЬ: кажется, есть два способа: использовать маску или IdxMax. Метод IdxMax работает, если ваш индекс уникален, а метод маски — в противном случае. В моем случае индекс не уникален, о чем я забыл упомянуть в начальном сообщении.