熊猫,按列删除重复项,重复项N次

时间:2019-10-24 07:37:15

标签: python pandas dataframe

这里是一个示例:

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的行

2 个答案:

答案 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.mapSeries.value_counts

df1 = df[df['file'].map(df['file'].value_counts()) != 4]

print (df)
    file   text
4  file2  Text5
5  file3  Text6

答案 1 :(得分:1)

GroupBytransform一起使用:

df[df.groupby('file').text.transform('size').ne(4)]

   file   text
4  file2  Text5
5  file3  Text6