Cómo actualizar un subconjunto de un DataFrame de pandas MultiIndexed
Estoy usando un DataFrame de pandas MultiIndexed y me gustaría multiplicar un subconjunto del DataFrame por un número determinado.
Es lo mismo queesta pero con un MultiIndex.
>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009],
'flavour':['strawberry','strawberry','banana','banana',
'strawberry','strawberry','banana','banana'],
'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
'sales':[10,12,22,23,11,13,23,24]})
>>> d = d.set_index(['year','flavour','day'])
>>> d
sales
year flavour day
2008 strawberry sat 10
sun 12
banana sat 22
sun 23
2009 strawberry sat 11
sun 13
banana sat 23
sun 24
Hasta ahora tan bueno. ¡Pero digamos que veo que todas las cifras de los sábados son solo la mitad de lo que deberían ser! Me gustaria multiplicar todosat
Ventas por 2.
Mi primer intento en esto fue:
sat = d.xs('sat', level='day')
sat = sat * 2
d.update(sat)
pero esto no funciona porque la variablesat
ha perdido elday
Nivel del índice:
>>> sat
sales
year flavour
2008 strawberry 20
banana 44
2009 strawberry 22
banana 46
por lo que los pandas no saben cómo unir las nuevas cifras de ventas al antiguo marco de datos.
Tuve una puñalada rápida en:
>>> sat = d.xs('sat', level='day', copy=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2248, in xs
raise ValueError('Cannot retrieve view (copy=False)')
ValueError: Cannot retrieve view (copy=False)
No tengo idea de lo que significa ese error, pero me siento como si estuviera haciendo una montaña en una colina. ¿Alguien sabe la forma correcta de hacer esto?
Gracias de antemano, Rob