仅当重复次数少于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
我该如何实现?预先感谢。
答案 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