2014-07-15 10 views
15

के साथ मौजूद है:पांडा: मैं एक दो आयामी (या अधिक) इस तरह DataFrame पांडा है जाँच करें कि पंक्ति निश्चित मूल्यों

>>> import pandas as pd 
>>> df = pd.DataFrame([[0,1],[2,3],[4,5]], columns=['A', 'B']) 
>>> df 
    A B 
0 0 1 
1 2 3 
2 4 5 

अब मान लीजिए कि मैं np.array([2,3]) की तरह एक numpy सरणी है और अगर वहाँ किसी भी जाँच करना चाहते हैं df में पंक्ति जो मेरी सरणी की सामग्री से मेल खाती है। यहां जवाब स्पष्ट रूप से सच होना चाहिए लेकिन उदाहरण के लिए। np.array([1,2]) को झूठी वापसी करनी चाहिए क्योंकि स्तंभ 1 में कॉलम ए और 2 में दोनों पंक्तियों के साथ कोई पंक्ति नहीं है।

निश्चित रूप से यह आसान है लेकिन अभी इसे नहीं देख रहा है।

+0

दोनों एक पंक्ति और 1 के साथ एक स्तंभ है, 2 तो वास्तव में क्या क्या आपका मतलब है कि नहीं है? –

+0

क्या आपने कुछ ऐसा करने की कोशिश की है जैसे df.isin ([1,2]) ?? यह उन बूलियन को आउटपुट करेगा जो आपको पूरी तरह से और आंशिक रूप से – ZJS

+0

@ जोहान रुडेल से मेल खाने वाली पंक्तियों को ढूंढने की आवश्यकता होगी: लेकिन ऐसी कोई पंक्ति नहीं है जिसमें कॉलम ए में 1 और कॉलम बी में 2 शामिल है। मैं एसक्यूएल में WHERE क्लॉज की तरह अर्थशास्त्र की तलाश में हूं । – Robin

उत्तर

27

बाहर कर देता है यह वास्तव में आसान है, निम्नलिखित यहां काम करता है:

>>> ((df['A'] == 2) & (df['B'] == 3)).any() 
True 
>>> ((df['A'] == 1) & (df['B'] == 2)).any() 
False 

हो सकता है कि किसी को एक बेहतर समाधान जो सीधे सरणी और स्तंभों से मेल करने की सूची में गुजर अनुमति देता है के साथ आता है।

ध्यान दें कि df['A'] == 2 के आसपास कोष्ठक वैकल्पिक नहीं हैं क्योंकि & ऑपरेटर == ऑपरेटर के रूप में उतना ही मजबूत है।

5

एक आसान तरीका है:

a = np.array([2,3]) 
(df == a).all(1).any() 
+0

यह केवल तभी काम करता है जब आयाम समान है, है ना? अर्थात। यदि मिलान पांच कॉलम डेटाफ्रेम के पहले दो कॉलम पर आधारित होना चाहिए, तो क्या यह असफल नहीं होगा? – Robin

+1

जो मामूली है। 'df' को df [df.columns [: 2]] 'के साथ बदलें – acushner

1

आप भी सूचकांक जहां मैचों हुई वापसी करना चाहते हैं:

index_list = df[(df['A'] == 2)&(df['B'] == 3)].index.tolist() 
संबंधित मुद्दे