Auf Ihrem begrenzten Datensatzes die folgenden Werke:
In [125]:
df.groupby('positions')['r vals'].filter(lambda x: len(x) >= 3)
Out[125]:
0 1.2
2 2.3
3 1.8
6 1.9
Name: r vals, dtype: float64
Sie das Ergebnis dieses Filters zuweisen und diese verwenden, um mit isin
filter your orig df:
In [129]:
filtered = df.groupby('positions')['r vals'].filter(lambda x: len(x) >= 3)
df[df['r vals'].isin(filtered)]
Out[129]:
r vals positions
0 1.2 1
1 1.8 2
2 2.3 1
3 1.8 1
6 1.9 1
Sie müssen nurändern-20
in Ihrem Fall
Ein anderer Ansatz wäre value_counts
verwenden ein Aggregat Serie zu erstellen, können wir dann so Ihre df zu filtern:
In [136]:
counts = df['positions'].value_counts()
counts
Out[136]:
1 4
3 2
2 1
dtype: int64
In [137]:
counts[counts > 3]
Out[137]:
1 4
dtype: int64
In [135]:
df[df['positions'].isin(counts[counts > 3].index)]
Out[135]:
r vals positions
0 1.2 1
2 2.3 1
3 1.8 1
6 1.9 1
EDIT
Wenn Sie möchten, Um das groupby-Objekt auf dem Datenframe anstatt einer Serie zu filtern, können Sie filter
direkt auf dem groupby-Objekt aufrufen:
In [139]:
filtered = df.groupby('positions').filter(lambda x: len(x) >= 3)
filtered
Out[139]:
r vals positions
0 1.2 1
2 2.3 1
3 1.8 1
6 1.9 1
Entschuldigen Sie, dass Sie 'r vals' filtern, die nicht mindestens 20 mal vorkommen oder die Sie Positionen filtern möchten, die nicht 20 eindeutige r vals haben? – EdChum