¿Qué reglas usa Pandas para generar una vista frente a una copia?

Estoy confundido acerca de las reglas que usa Pandas al decidir que una selección de un marco de datos es una copia del marco de datos original, o una vista del original.

Si tengo, por ejemplo,

df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))

Entiendo que unquery devuelve una copia para que algo así como

foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40

no tendrá efecto en el marco de datos original,df. También entiendo que los segmentos escalares o con nombre devuelven una vista, por lo que las asignaciones a estos, como

df.iloc[3] = 70

o

df.ix[1,'B':'E'] = 222

cambiarádf. Pero estoy perdido cuando se trata de casos más complicados. Por ejemplo,

df[df.C <= df.B]  = 7654321

cambiosdf, pero

df[df.C <= df.B].ix[:,'B':'E']

no.

¿Hay una regla simple que Pandas está usando y que solo me falta? ¿Qué está pasando en estos casos específicos? y, en particular, ¿cómo cambio todos los valores (o un subconjunto de valores) en un marco de datos que satisface una consulta particular (como estoy intentando hacer en el último ejemplo anterior)?

Nota: Esto no es lo mismo queesta pregunta; y he leidola documentación, pero no estoy iluminado por eso. También he leído las preguntas "relacionadas" sobre este tema, pero todavía me falta la regla simple que Pandas está usando y cómo la aplicaría, por ejemplo, para modificar los valores (o un subconjunto de valores) en un marco de datos que satisfaga una consulta particular.

Respuestas a la pregunta(1)

Su respuesta a la pregunta