Chciałbym zmodyfikować niektóre wartości z kolumny w mojej DataFrame. W tej chwili mam view z select poprzez multi-index mojego oryginalnego df
(i modyfikacja zmienia się df
).Przypisywanie nowych wartości do plasterka z MultiIndex DataFrame
Oto przykład:
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
staram się zmieniać plaster df
do wartości skalarnej:
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
naprawdę chcę zmodyfikować kilka wartości w kolumnie (a od indeksowanie zwraca wektor, a nie wartość skalarną, myślę, że byłoby to bardziej sensowne):
In [6]: df.ix['bar', 'one', :]['A'] = [999, 888]
# again df remains unchanged
Używam pand 0.11. Czy istnieje prosty sposób na zrobienie tego?
Obecnym rozwiązaniem jest odtworzenie pliku df z nowego i zmodyfikowanie wartości, które chcę. Ale nie jest elegancka i może być bardzo ciężka na złożonej ramie danych. Moim zdaniem problem powinien pochodzić z .ix i .loc nie zwracając widoku, ale kopię.
dlaczego -1 głosowanie? Czy możesz przynajmniej to wyjaśnić? – HadiM
+1 doskonałe pytanie, do mylącego problemu. Jedyne, co przychodzi mi do głowy, to fakt, że został odrzucony, ponieważ tytuł nie jest opisowy? (ale kto wie!) –
Przepraszamy za tytuł, ale nie jestem native speakerem w języku angielskim, a temat jest nieco skomplikowany, więc trudno znaleźć dobre :-) Jeśli chcesz przesłać mi jeden tytuł, mogę zmienić obecny jeden. – HadiM