Como atualizar um subconjunto de um DataFrame pandas MultiIndexed

Eu estou usando um DataFrame pandas MultiIndexed e gostaria de multiplicar um subconjunto do DataFrame por um determinado número.

É o mesmo queisto mas com um 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

Por enquanto, tudo bem. Mas digamos que todos os números de sábado são apenas metade do que deveriam ser! Eu gostaria de multiplicar tudosat vendas por 2.

Minha primeira tentativa foi:

sat = d.xs('sat', level='day')
sat = sat * 2
d.update(sat)

mas isso não funciona porque a variávelsat perdeu oday nível do índice:

>>> sat
                 sales
year flavour          
2008 strawberry     20
     banana         44
2009 strawberry     22
     banana         46

Assim, os pandas não sabem como juntar os novos números de vendas ao velho dataframe.

Eu tive uma punhalada rápida em:

>>> 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)

Eu não tenho ideia do que esse erro significa, mas eu sinto que estou fazendo uma montanha fora de um montículo. Alguém sabe o caminho certo para fazer isso?

Obrigado antecipadamente, Rob

questionAnswers(2)

yourAnswerToTheQuestion