仅当重复次数小于X时才丢弃重复项

时间:2019-11-18 12:57:15

标签: python-3.x pandas

仅当重复次数少于x(例如3)时,才需要在DataFrame中删除重复的行 (如果重复项超过3个,请保留!)

示例:

其中count是重复项的数量,重复项在data列中

data | count
-------------
a    | 1
b    | 2
b    | 2
c    | 1
d    | 3
d    | 3
d    | 3

所需结果:

data | count
-------------
a    | 1
b    | 1
c    | 1
d    | 3
d    | 3
d    | 3

我该如何实现?预先感谢。

3 个答案:

答案 0 :(得分:3)

我相信您需要Series.duplicated的链条条件,并在boolean indexing中获得N的更大或相等的值,为1列最后设置count:< / p>

N = 3
df1 = df[~df.duplicated('data') | df['count'].ge(N)].copy()
df1.loc[df['count'] < N, 'count'] = 1
print (df1)
  data  count
0    a      1
1    b      1
3    c      1
4    d      3
5    d      3
6    d      3

答案 1 :(得分:1)

IIUC,您可以执行以下操作:

# create mask for non-duplicates and groups larger than 3
mask = (df.groupby('data')['count'].transform('count') >= 3) | ~df.duplicated('data')

# filter
filtered = df.loc[mask].drop('count', axis=1)

# reset count column
filtered['count'] = filtered.groupby('data')['data'].transform('count')

print(filtered)

输出

  data  count
0    a      1
1    b      1
3    c      1
4    d      3
5    d      3
6    d      3

答案 2 :(得分:0)

N = 3
df['count'] = df['count'].apply(lambda x: 1 if x < N else x)
result = pd.concat([df[df['count'].eq(1)].drop_duplicates(), df[df['count'].eq(N)]])

结果

 data  count
0   a   1
1   b   1
3   c   1
4   d   3
5   d   3
6   d   3