2013-10-21 7 views
8

Ich versuche die Werte der "FreeSec" -Spalte auf True für die gefilterten Zeilen meines Pandas-Datenrahmens zu setzen. Hier ist der Code:Wie setze ich Werte auf die Zeilen der booleschen gefilterten Dataframe-Spalte

data[data["Brand"].isin(group_clients)].FreeSec = True 

Allerdings, wenn ich die Werte überprüfen sind sie nach wie vor auf False gesetzt.

>>> data[data["Brand"].isin(group_clients)].FreeSec 

12  False 
163 False 
164 False 
165 False 
166 False 
167 False 
168 False 
169 False 

Was fehlt mir hier?

Antwort

14

Sie sollten loc verwenden diese ohne Verkettungs zu tun, die diese Zuordnung garauntee wird funktioniert:

data.loc[data["Brand"].isin(group_clients), "FreeSec"] = True 

Zuordnung in loc außer Kraft gesetzt wird, so dass die Umsetzung Detail davon, ob es tatsächlich a view or a copy spielt keine Rolle Es ist wichtig, wenn Sie Kette so vermeiden/sehr vorsichtig sein.

+0

+1 sollte dies akzeptiert werden –

+0

mit nützlichen und akzeptierten Zecken vermischt! das ist "um fair zu sein" ich akzeptierte eine, während ich eine andere nützte o_O – kannbaba

+0

Ich weiß nicht, was nützlich ist, aber Sie können mehr als eine Antwort hinzufügen :) –

2

Es funktioniert anders herum:

data["FreeSec"][data["Brand"].isin(group_clients)] = True 

ich in Pandas kein Experte bin, so überprüfen müssen, warum es so funktioniert.

+1

http://pandas.pydata.org/pandas-docs/dev/indexing.html#returning-a-view-versus-a-copy –

+0

Zurückgeben einer Ansicht im Vergleich zu einem Kopierproblem. Danke vielmals! – kannbaba

+0

Danke, war fast sicher, dass OP eine Kopie zurückgibt, aber wusste nicht über genaue Regeln –

Verwandte Themen