举个例子:
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'],
})
我需要删除 'file' 重复 4 次的行,所以在这个例子中我需要删除 file = file1 和 file4 的行
使用GroupBy.transform
获取每个组的值计数,因此可能按 boolean indexing
过滤:
df1 = df[df.groupby('file')['file'].transform('size') != 4]
说明:使用 transform
是必要的,在 groupby
之后指定一些列用于计数 - 如果使用 size
如果使用任何列,它的工作方式相同DataFrame
并返回新列(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