¿Por qué no puedo asignar parte de mi Pandas DataFrame?

Estoy confundido de por qué los siguientes pandas no asignan con éxito los últimos dos valores de la columna A a las dos primeras entradas de la columna B:

 df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7], 'B': [10, 20, 30, 40, 50, 60, 70]}) df = df.join(pd.DataFrame({'C': ['a', 'b', 'c', 'd', 'e', 'f', 'g']})) df['B2'] = df.B.shift(2) df[:2].B2 = list(df[-2:].A) 

Lo que me desconcierta es que en una aplicación “real” equivalente (aparentemente), parece funcionar ( y generar algún comportamiento extraño ).

¿Por qué la asignación final no cambia los valores de las dos entradas en el dataframe?

Puede funcionar y es por eso que es insidioso, consulte aquí: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

En general, con marcos de múltiples dimensiones depende de la construcción de cuándo funcionaría (por ejemplo, si lo creas todo a la vez, creo que siempre funcionará). Dado que lo está creando después (a través de la unión), depende de los mecanismos de creación de la vista numpy subyacente.

Nunca jamás asignes así, usa loc

 df.loc[:2,'B2'] = ....