Dies ist eine ziemlich ähnliche Frage zu this question, aber mit einem Schlüssel Unterschied: Ich wähle die Daten, die ich nicht durch ihren Index, sondern durch einige Kriterien ändern möchte.Ersetze Wert für eine ausgewählte Zelle in Pandas DataFrame ohne Index
Wenn die Kriterien I eine einzelne Zeile anwenden zurückzukehren, würde ich erwarten, dass der Wert einer bestimmten Spalte in dieser Zeile auf einfache Art und Weise in der Lage sein zu setzen, aber mein erster Versuch nicht funktioniert:
>>> 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
day flavour sales year
0 sat strawberry 10 2008
1 sun strawberry 12 2008
2 sat banana 22 2008
3 sun banana 23 2008
4 sat strawberry 11 2009
5 sun strawberry 13 2009
6 sat banana 23 2009
7 sun banana 24 2009
>>> d[d.sales==24]
day flavour sales year
7 sun banana 24 2009
>>> d[d.sales==24].sales = 100
>>> d
day flavour sales year
0 sat strawberry 10 2008
1 sun strawberry 12 2008
2 sat banana 22 2008
3 sun banana 23 2008
4 sat strawberry 11 2009
5 sun strawberry 13 2009
6 sat banana 23 2009
7 sun banana 24 2009
Also, anstatt die Bananenverkäufe von Sonntag am Sonntag auf 100 zu setzen, passiert nichts! Was ist der beste Weg, dies zu tun? Idealerweise sollte die Lösung die Zeilennummer verwenden, da Sie dies normalerweise nicht im Voraus wissen!
Vielen Dank im Voraus, Rob
Ja! Lösung 1. hat funktioniert. So kontraintuitiv, dass das funktioniert: 'd.sales [d.sales == 24] = 100' aber das ist nicht:' d [d.sales == 24] .sales = 100'. Sie sehen (funktional) so aus, dass sie für mich gleich sind. Ah, gut. Danke @waitingkuo. – LondonRob
d [d.sales == 24] erzeuge ein neues Objekt. – waitingkuo
re. @ Wartingkuo's Kommentar: Ist das erwartetes Verhalten, Pandas Jungs? Sicher nicht intuitiv, dass 'd [d.sales == 24]' eine Kopie des ursprünglichen 'DataFrame' erzeugen sollte. In der Tat würde ich sagen, dass jedes Objekt eine Referenz auf das Original sein sollte (einschließlich der Auswahl einer einzelnen Zeile, die korrekt zu einer Pandas 'Serie' kollabiert), es sei denn, dies wird explizit vom Benutzer angefordert (über eine Art Kopie) = Wahr "). Gedanken? – LondonRob