2013-10-21 15 views
8

की पंक्तियों के मानों को सेट करने के लिए कैसे करें, मैं अपने पांडस डेटाफ्रेम की फ़िल्टर की गई पंक्तियों के लिए "फ्रीसेक" कॉलम के मानों को 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 

loc में असाइनमेंट ओवरराइड की गई है इतना है कि यह वास्तव में है, चाहे के कार्यान्वयन विस्तार a view or a copy कोई फर्क नहीं पड़ता , इससे कोई फर्क नहीं पड़ता कि आप श्रृंखला से बचें/बहुत सावधान रहें।

+0

+1 इसे स्वीकार किया जाना चाहिए –

+0

उपयोगी और स्वीकृत टिकों के साथ गड़बड़ हो जाना चाहिए! "निष्पक्ष होने के लिए" मैंने एक और स्वीकार किया जबकि एक अन्य o_O – kannbaba

+0

उपयोगी नहीं है कि क्या उपयोगी है, लेकिन आप एक से अधिक उत्तरों को ऊपर उठा सकते हैं :) –

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

धन्यवाद, लगभग यह सुनिश्चित था कि ओपी एक प्रतिलिपि देता है, लेकिन सटीक नियमों के बारे में नहीं पता था –

संबंधित मुद्दे