Python 按发生次数删除组

Python 按发生次数删除组,python,pandas,dataframe,counter,pandas-groupby,Python,Pandas,Dataframe,Counter,Pandas Groupby,嗨,我想删除出现次数小于某个数字的条目所在的行,例如: df = pd.DataFrame({'a': [1,2,3,2], 'b':[4,5,6,7], 'c':[0,1,3,2]}) df abc 0 1 4 0 1 2 5 1 2 3 6 3 3 2 7 2 如果列“a”中的出现次数少于两次,我想在这里删除所有行。 想要的输出: abc 1 2 5 1 3 2 7 2 据我所知: 我们可以通过condition=df['a'].value_coun

嗨,我想删除出现次数小于某个数字的条目所在的行,例如:

df = pd.DataFrame({'a': [1,2,3,2], 'b':[4,5,6,7], 'c':[0,1,3,2]})
df
abc
0  1  4  0
1  2  5  1
2  3  6  3
3  2  7  2
如果列“a”中的出现次数少于两次,我想在这里删除所有行。
想要的输出:

abc
1  2  5  1
3  2  7  2
据我所知: 我们可以通过
condition=df['a'].value_counts()<2
找到出现的次数,它会给我类似的信息:

2错误
3正确
1正确
名称:a,数据类型:int64
但我不知道如何从这里删除行。

提前谢谢

您可以使用
df.where
dropna

df.where(df['a'].value_counts() <2).dropna()

     a   b   c
1   2.0 5.0 1.0
3   2.0 7.0 2.0

df.where(df['a'].value_counts()您可以尝试这样的方法来获取每个组的长度,转换回原始索引并通过它索引df

df[df.groupby("a").transform(len)["b"] >= 2]


    a   b   c
1   2   5   1
3   2   7   2
将其分解为以下各个步骤:

df.groupby("a").transform(len)["b"]

0    1
1    2
2    1
3    2
Name: b, dtype: int64
这些是转换回原始索引的组大小

df.groupby("a").transform(len)["b"] >=2

0    False
1     True
2    False
3     True
Name: b, dtype: bool
然后,我们将其转换为布尔索引,并用它为原始数据帧编制索引 该方法将
df.groupby('a')['b'].size()
映射到与
df['a']
对齐的
df

+
res = df[df.groupby('a')['b'].transform('size') >= 2]
s = df['a'].value_counts()
res = df[df['a'].map(s) >= 2]

print(res)

   a  b  c
1  2  5  1
3  2  7  2