2013-10-21 88 views
8

我試圖設置「FreeSec」列的值爲True爲我的熊貓數據幀的過濾行。這裏是代碼:如何設置值爲布爾過濾數據幀列

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

但是,當我檢查它們的值仍然設置爲False

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

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

我在這裏錯過了什麼?

回答

14

你應該用祿來做到這一點沒有鏈接,這將garauntee分配對象的工作原理:在LOC

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

分配被覆蓋,使得它是否實際上是實現細節a view or a copy沒關係,如果你連鎖的話,這確實很重要,所以避免/非常小心。

+0

+1這應該被接受 –

+0

搞砸了有用的和接受的蜱!這是「公平」我接受一個而有用的另一個o_O – kannbaba

+0

不知道什麼是有用的,但你可以upvote多個答案:) –

2

它的工作原理周圍的其他方式:

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

我不是熊貓方面的專家,所以要檢查它爲什麼這樣工作。

+1

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

+0

返回視圖與複製問題。 thnx很多! – kannbaba

+0

謝謝,幾乎可以肯定,OP一個返回副本,但不知道確切的規則 –