Atribuir novos valores para fatiar de MultiIndex DataFrame
Eu gostaria de modificar alguns valores de uma coluna no meu DataFrame. No momento eu tenho umVisão de selecionar através do multi índice do meu originaldf
(e modificar mudadf
).
Aqui está um exemplo:
In [1]: arrays = [np.array(['bar', 'bar', 'baz', 'qux', 'qux', 'bar']),
np.array(['one', 'two', 'one', 'one', 'two', 'one']),
np.arange(0, 6, 1)]
In [2]: df = pd.DataFrame(randn(6, 3), index=arrays, columns=['A', 'B', 'C'])
In [3]: df
A B C
bar one 0 -0.088671 1.902021 -0.540959
two 1 0.782919 -0.733581 -0.824522
baz one 2 -0.827128 -0.849712 0.072431
qux one 3 -0.328493 1.456945 0.587793
two 4 -1.466625 0.720638 0.976438
bar one 5 -0.456558 1.163404 0.464295
Eu tento modificar uma fatia dedf
para um valor escalar:
In [4]: df.ix['bar', 'two', :]['A']
Out[4]:
1 0.782919
Name: A, dtype: float64
In [5]: df.ix['bar', 'two', :]['A'] = 9999
# df is unchanged
Eu realmente quero modificarde várias valores na coluna (e como a indexação retorna um vetor, não um valor escalar, acho que isso faria mais sentido):
In [6]: df.ix['bar', 'one', :]['A'] = [999, 888]
# again df remains unchanged
Eu estou usando pandas 0.11. Existe uma maneira simples de fazer isso?
A solução atual é recriar o df de um novo e modificar os valores que eu quero. Mas não é elegante e pode ser muito pesado em um dataframe complexo. Na minha opinião, o problema deve vir de .ix e .loc não retornando uma visão, mas uma cópia.