这里是一个示例:
df = pd.DataFrame({
'file': ['file1','file1','file1','file1','file2','file3','file4','file4','file4','file4'],
'text': ['Text1','Text2','Text3','Text4','Text5','Text6','Text7','Text8','Text9','Text10'],
})
我需要删除“文件”重复4次的行,因此在此示例中,我需要删除文件= file1和file4的行
答案 0 :(得分:3)
使用GroupBy.transform
获取每个组的值计数,因此可以通过boolean indexing
进行过滤:
df1 = df[df.groupby('file')['file'].transform('size') != 4]
说明:要使用transform
,必须在groupby
之后指定一些列进行计数-如果使用size
,则使用DataFrame
的任何列都可以工作,并且返回new列(Series
)的大小与原始DataFrame相同,并由计数填充:
print (df.groupby('file')['file'].transform('size'))
0 4
1 4
2 4
3 4
4 1
5 1
6 4
7 4
8 4
9 4
Name: file, dtype: int64
或使用DataFrameGroupBy.filter
-如果有大数据,性能应该会变慢:
df1 = df.groupby('file').filter(lambda x: len(x) != 4)
或将Series.map
与Series.value_counts
:
df1 = df[df['file'].map(df['file'].value_counts()) != 4]
print (df)
file text
4 file2 Text5
5 file3 Text6
答案 1 :(得分:1)
将GroupBy
与transform
一起使用:
df[df.groupby('file').text.transform('size').ne(4)]
file text
4 file2 Text5
5 file3 Text6