2016-01-09 5 views
7

मेरे पास डेटा में मानों के समूह और प्रत्येक समूह के भीतर समूह हैं, मैं यह जांचना चाहता हूं कि समूह के भीतर कोई मान 8 से नीचे है या नहीं। यदि यह स्थिति पूरी हो जाती है, तो संपूर्ण समूह डेटा सेट से हटा दिया जाता है।पांडा: समूह में कोई मान आवश्यक स्थिति से समूह को हटा दें

कृपया ध्यान दें कि मैं समूह के कॉलम में किसी अन्य कॉलम में स्थित मान का जिक्र कर रहा हूं।

उदाहरण इनपुट:

Groups Count 
    1  7 
    1  11 
    1  9 
    2  12 
    2  15 
    2  21 

आउटपुट:

Groups Count 
    2  12 
    2  15 
    2  21 

उत्तर

11

क्या आप प्रश्न में वर्णित है, जब तक वहाँ के रूप में कम से कम एक मूल्य 8 समूह के भीतर से नीचे है के आधार पर, तो उस समूह नहीं रखी जाएगी। तो समकक्ष बयान यह है कि जब तक उस समूह के भीतर न्यूनतम मूल्य 8 से नीचे है, तो उस समूह को छोड़ दिया जाना चाहिए।

फ़िल्टर सुविधा का उपयोग करके, वास्तविक कोड केवल एक लाइन के लिए कम किया जा सकता, Filtration को देखें, तो आपको निम्न कोड का उपयोग हो सकता है:

dfnew = df.groupby('Groups').filter(lambda x: x['Count'].min()>8) 
dfnew.reset_index(drop=True, inplace=True) # reset index 
dfnew = dfnew[['Groups','Count']] # rearrange the column sequence 
print(dfnew) 

Output: 
    Groups Count 
0  2  12 
1  2  15 
2  2  21 
+0

इस सवाल के बारे में सही जवाब के रूप में चिह्नित किया जाना चाहिए ओपी – Daniel

+0

आह .. मेरी टिप्पणी गड़बड़ कर दिया। इसे ओपी के सवाल के बारे में सही उत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि यह पांडा इनबिल्ड 'ग्रुपबी' फ़ंक्शन का उपयोग करने का सबसे शानदार तरीका है। यह बेहद प्रभावशाली और पठनीय और एक लाइनर है। एक ऊपर – Daniel

3

आप उपयोग कर सकते हैं isin, loc और उल्टा मुखौटा द्वारा उप सेट चुनने के साथ unique। अंतिम आप कर सकते हैं reset_index:

print df 

    Groups Count 
0  1  7 
1  1  11 
2  1  9 
3  2  12 
4  2  15 
5  2  21 

print df.loc[df['Count'] < 8, 'Groups'].unique() 
[1] 

print ~df['Groups'].isin(df.loc[df['Count'] < 8, 'Groups'].unique()) 

0 False 
1 False 
2 False 
3  True 
4  True 
5  True 
Name: Groups, dtype: bool 

df1 = df[~df['Groups'].isin(df.loc[df['Count'] < 8, 'Groups'].unique())] 
print df1.reset_index(drop=True) 

    Groups Count 
0  2  12 
1  2  15 
2  2  21 
संबंधित मुद्दे