我有一个像下面的pandas数据框
text name target
0 str1 name1 1
1 str1 name2 3
2 str1 name2 3
3 str2 name1 2
4 str2 name1 2
5 str2 name1 4
6 str3 name3 3
我需要删除那些只出现一次目标类的行。在这种情况下,我需要删除行索引0
和5
,因为1
和4
仅出现一次。
我调查了this post,并在下面进行了尝试:
df[df.groupby(['target']).transform('sum') > 1]
但这似乎不起作用。有人可以建议吗?
答案 0 :(得分:1)
希望已足够:过滤掉目标计数不大于1的行
df.groupby('target').filter(lambda x: x.count().gt(1).any())
text name target
1 str1 name2 3
2 str1 name2 3
3 str2 name1 2
4 str2 name1 2
6 str3 name3 3
答案 1 :(得分:1)
您可以使用value_counts
,向后映射和过滤:
print(df[df.target.map(df.target.value_counts()).gt(1)])
输出:
text name target
1 str1 name2 3
2 str1 name2 3
3 str2 name1 2
4 str2 name1 2
6 str3 name3 3