2013-10-21 15 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 

私はここで何が欠けていますか?私はパンダの専門家ではないよ、それはこのように動作している理由を確認する必要があり

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

答えて

14

あなたはその割り当てが働くgaraunteeなる、を連鎖することなく、このを行うには、LOCを使用する必要があります。それは実際にa view or a copyのかどうかの実装の詳細は重要ではありませんように、LOCで

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

割り当てが上書きされますあなたがチェーンするならば、それは避けてください/非常に注意してください。

+0

+1これが受け入れられるはずです –

+0

は有用で受け入れられたダニが混乱しています!それは "公正である"と私は受け入れている間に受け入れられましたo_O – kannbaba

+0

何が役に立つのか分かりませんが、複数の答えをupvoteできます:) –

2

それは他の方法で回避動作します。

+1

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

+0

ビューとコピーの問題を返す。多くのthnx! – kannbaba

+0

おかげさまで、OPの方がコピーを返しますが、正確なルールについてはわからないと確信していました。 –

関連する問題