2016-01-09 18 views
7

Verilerdeki ve her gruptaki değer gruplarına sahibim, gruptaki bir değerin 8'un altında olup olmadığını kontrol etmek istiyorum. Bu koşul karşılanırsa, tüm grup veri kümesinden kaldırılır.Pandalar: Gruptaki bir değer gerekli koşulla karşılaştığında verileri gruptan kaldır

Lütfen atıfta bulunduğum değer, grup sütununa başka bir sütunda yatar.

Örnek Girdi:

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

Çıktı:

Groups Count 
    2  12 
    2  15 
    2  21 

cevap

11

, o grup bırakılmaz. Yani eşdeğer ifade, o gruptaki minimum değerin 8'in altında olduğu sürece, bu grubun bırakılması gerektiğidir. Bu sorunun ilgili doğru cevap olarak işaretlenmesi gereken

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

: Filtre özelliğini kullanarak

, gerçek kod sadece bir satır indirgenebilir, Filtration bakınız, aşağıdaki kodu kullanabilirsiniz OP – Daniel

+0

Ah'in. yorumumu karıştırdı. Bu pandas ın groupby' işlevini kullanmanın en zarif yolu olduğundan OP'nin sorusuyla ilgili doğru cevap olarak işaretlenmelidir. Oldukça verimli ve okunabilir ve tek liner. 1 Yukarı – Daniel

3

kullanabilirsiniz isin, loc ve ters maske ile alt kümesi seçme ile unique. Son Eğer reset_index yapabilirsiniz: sürece en az bir değer grubu içinde 8 altındadır olmadığı için, söz konusu tanımladığı dayanarak

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 
İlgili konular