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'] = ....