Desidero modificare alcuni valori da una colonna nel mio DataFrame. Al momento ho una vista da selezionare tramite il multiindice del mio originale df
(e la modifica cambia df
).Assegnare nuovi valori a slice da MultiIndex DataFrame
Ecco un esempio:
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
mi tenta di modificare una fetta di df
ad un valore scalare:
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
Ho molta voglia di modificare diversi valori nella colonna (e dal momento che l'indicizzazione restituisce un vettore, non un valore scalare, penso che ciò avrebbe più senso):
In [6]: df.ix['bar', 'one', :]['A'] = [999, 888]
# again df remains unchanged
Sto usando panda 0.11. C'è un modo semplice per farlo?
La soluzione corrente è di ricreare df da uno nuovo e modificare i valori che voglio. Ma non è elegante e può essere molto pesante su dataframe complessi. Secondo me il problema dovrebbe venire da .ix e .loc che non restituiscono una vista ma una copia.
perché -1 voto? Puoi almeno spiegarlo? – HadiM
+1 una domanda eccellente, per un problema di confusione. L'unica cosa che posso pensare è che è stato downvoted perché il titolo non è descrittivo? (ma chissà!) –
Scusa per il titolo, ma non sono madrelingua inglese e l'argomento è un po 'complesso, quindi è difficile trovarne uno bello :-) Se vuoi inviarmi un titolo, posso cambiare l'attuale uno. – HadiM