2015-03-23 8 views
10

मैं एक pandasDataFramedf:का चयन पांडा dataframe में एक से अधिक स्तंभ मानों के आधार पर पंक्तियों

import pandas as pd 

data = {"Name": ["AAAA", "BBBB"], 
     "C1": [25, 12], 
     "C2": [2, 1], 
     "C3": [1, 10]} 

df = pd.DataFrame(data) 
df.set_index("Name") 

जो इस तरह दिखता है जब (संदर्भ के लिए) मुद्रित:

 C1 C2 C3 
Name    
AAAA 25 2 1 
BBBB 12 1 10 

मैं चयन करने के लिए चाहते हैं पंक्तियां जिसके लिए C1, C2 और C3 में 0 और 20 के बीच मूल्य हैं।

क्या आप उन पंक्तियों का चयन करने के लिए एक शानदार तरीका सुझा सकते हैं?

+0

जब आप प्रश्न भागों से कोड भागों को दूर करने के लिए अपने प्रश्न में स्वरूपण जोड़ते हैं तो यह सहायक होता है। साथ ही, आपको हमेशा यह दिखाना चाहिए कि आपने पहले अपने स्वयं के समाधान के साथ आने और आपके द्वारा किए गए कार्यों का वर्णन करने की कोशिश की थी। – vlasits

उत्तर

12

मुझे लगता है कि नीचे यह करना चाहिए, लेकिन इसकी लालित्य बहस के लिए है।

new_df = old_df[((old_df['C1'] > 0) & (old_df['C1'] < 20)) & ((old_df['C2'] > 0) & (old_df['C2'] < 20)) & ((old_df['C3'] > 0) & (old_df['C3'] < 20))] 
9

छोटा संस्करण:

In [65]: 

df[(df>=0)&(df<=20)].dropna() 
Out[65]: 
    Name C1 C2 C3 
1 BBBB 12 1 10 
3

मैं() बातें

df.query('C1>=0 and C1<=20 and C2>=0 and C2<=20 and C3>=0 and C3<=20') 
0

बिल्डिंग बाद के दो जवाब के ऊपर इस तरह के लिए df.query का उपयोग करना चाहते हैं: एक भी frame.query उपयोग कर सकते हैं a < b < c वाक्यविन्यास:

  • df.query("(0 < C1 < 20) and (0 < C2 < 20) and (0 < C3 < 20)")

और/या frame.query के @foo वाक्य रचना (इसके प्रलेखन के हवाले से: "आप वातावरण में चर का उल्लेख कर सकते उन्हें एक @ चरित्र के साथ लगाकर द्वारा"):

  • df.query("0 < @df < 20").dropna()
संबंधित मुद्दे