2013-10-21 59 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一个返回副本,但不知道确切的规则 –