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