2017-03-12 4 views
1

Ich habe folgende Datenrahmen:‚numpy.ndarray‘ Objekt hat kein Attribut ‚count‘

df = pd.DataFrame({'Label': list('AABCCC'), 'Values': [1,2,3,4,np.nan,8] }) 

Ich will diese Gruppen fallen, die keine Mindestanzahl von Artikeln haben (eine oder weniger), damit ich folgende versucht, die:

f = lambda x: x.Values.count() > 1 

df.groupby('Label').filter(f) 

dies ist jedoch ein Fehler ausgelöst:

Error : 'numpy.ndarray' object has no attribute 'count'

Wo ist es schief gehen?

+0

starten. 'Df.groupby ('Label') -Filter (lambda x: len (x)> 1) ' – MaxU

Antwort

2

Es Sie keine Values aber values Spalte haben scheint, müssen so hinzufügen [] weil Kollision mit values Funktion.

Probe:

df = pd.DataFrame ({'values': [1,2,3,4,np.nan,8] }) 
print (df) 
    values 
0  1.0 
1  2.0 
2  3.0 
3  4.0 
4  NaN 
5  8.0 

#return numpy array 
print (df.values) 
[[ 1.] 
[ 2.] 
[ 3.] 
[ 4.] 
[ nan] 
[ 8.]] 

#select column values 
print (df['values']) 
0 1.0 
1 2.0 
2 3.0 
3 4.0 
4 NaN 
5 8.0 
Name: values, dtype: float64 

für mich Ihre Lösung funktioniert schön, ich auch .Values-['Values'] ändern.

df1 = df.groupby('Label').filter(lambda x: x['Values'].count() > 1) 
print (df1) 
    Label Values 
0  A  1.0 
1  A  2.0 
3  C  4.0 
4  C  NaN 
5  C  8.0 

Alternative Lösung mit transform und boolean indexing:

print (df.groupby('Label')['Values'].transform('count')) 
0 2.0 
1 2.0 
2 1.0 
3 2.0 
4 2.0 
5 2.0 
Name: Values, dtype: float64 

print (df.groupby('Label')['Values'].transform('count') > 1) 
0  True 
1  True 
2 False 
3  True 
4  True 
5  True 
Name: Values, dtype: bool 

print (df[df.groupby('Label')['Values'].transform('count') > 1]) 
    Label Values 
0  A  1.0 
1  A  2.0 
3  C  4.0 
4  C  NaN 
5  C  8.0 

Überprüfen Sie auch What is the difference between size and count in pandas?

+0

danke jezrael, gründlich verstanden ....... – Niko

+0

Danke für die Annahme. Btw, meiner Meinung nach wählen mit '.' ist schöner und schneller, aber dann keine Spalte' Werte', 'sum',' count', 'mean' weil' .sum', '.values' ... Pandas Funktionen zurückgeben . Umso sicherer ist es, '[]' zu verwenden und dann funktionieren alle Spaltennamen einwandfrei. Schönen Tag und viel Glück! – jezrael

Verwandte Themen