2015-03-12 3 views
12

मैं पंक्तियां हटाना चाहते जब कुछ शर्तें पूरी की जाएं:को हटाने से एकाधिक शर्तों अजगर पांडा के आधार पर पंक्तियों

उदाहरण के लिए, एक यादृच्छिक DataFrame उत्पन्न होता है:

तालिका के
import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.random.randn(10, 4), columns=['one', 'two', 'three', 'four']) 
print df 

एक उदाहरण के रूप में दिखाया गया है नीचे:

 one  two  three  four 
0 -0.225730 -1.376075 0.187749 0.763307 
1 0.031392 0.752496 -1.504769 -1.247581 
2 -0.442992 -0.323782 -0.710859 -0.502574 
3 -0.948055 -0.224910 -1.337001 3.328741 
4 1.879985 -0.968238 1.229118 -1.044477 
5 0.440025 -0.809856 -0.336522 0.787792 
6 1.499040 0.195022 0.387194 0.952725 
7 -0.923592 -1.394025 -0.623201 -0.738013 
8 -1.775043 -1.279997 0.194206 -1.176260 
9 -0.602815 1.183396 -2.712422 -0.377118 

मैं परिस्थितियों के आधार पर हुई पंक्तियां हटाना चाहते है कि:

पंक्ति 'एक', 'दो', या 'तीन' से अधिक 0 के मूल्य के साथ पंक्ति; और 0 से कम 'चार' के मान को हटा दिया जाना चाहिए।

df = df[df.one > 0 or df.two > 0 or df.three > 0 and df.four < 1] 

हालांकि, इस प्रकार एक त्रुटि संदेश में जिसके परिणामस्वरूप:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

किसी एकाधिक शर्तों के आधार पर हटाने के तरीके से मेरी मदद कर सके

तब मैं इस प्रकार लागू करने की कोशिश की?

उत्तर

22

For reasons that aren't 100% clear to me, pandas बिटवाइज़ तार्किक ऑपरेटरों | और &, लेकिन नहीं बूलियन लोगों or और and साथ अच्छा खेलता है।

ऐसा करें:

df = df[(df.one > 0) | (df.two > 0) | (df.three > 0) & (df.four < 1)] 
+5

आप 'DF = df [((df.one> 0) | (df.two> 0) | (df.three> 0)) चाहते हैं और (df। चार <1)] 'ऐसा क्यों है क्योंकि यह एरे की तुलना करने के लिए संदिग्ध है क्योंकि संभावित रूप से कई मैचों को यह देखा जाता है: http://stackoverflow.com/questions/10062954/valueerror-the-truth-value-of-an-array -एक-से-एक-तत्व-अस्पष्ट – EdChum

+0

ओह, ओह, अंत में 'और' नहीं देखे। संपादित। – Brionius

+1

@ ब्रियोनियस: यह मूल रूप से है क्योंकि 'या' और' और 'उनके वर्ग को कक्षा द्वारा अनुकूलित नहीं किया जा सकता है। वे बूल (the_object) के परिणाम के आधार पर करते हैं, और यही वह है। – DSM

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