繁体   English   中英

如何通过检查条件删除Pandas DataFrame中的重复项?

[英]How to drop duplicates in Pandas DataFrame by checking for a condition?

我有这个dataFrame:

ID | a |
-------- 
 1 | 10  
 1 | 40 
 2 | 5
 2 | 10 


df.drop_duplicates('ID')

我想通过检查“ID”列中的重复条目来删除重复的行,并保留列a中值为10的行。

我希望我的结果df看起来像

ID | a 
-------- 
 1 | 10
 2 | 10

我已经扩展了你的数据,以包含一个没有重复数据的数据点,并且重复三次,其中10的值是重复的。

我想通过检查“ID”列中的重复条目来删除重复的行,并保留列a中值为10的行。

我将此解释为保留没有重复的行,并且仅当列a的值等于10时才会保留重复项(这将导致相同ID的重复值,其中每个值的值为10)。

我使用Counter来计算每个ID的出现次数。 然后,我为这些重复的ID行创建重复列表和DataFrame掩码。

最后,我使用.loc来选择不在我的掩码中的行(即那些不重复的行)或重复但在列a具有值10的行。 此时,仍然可以为列a设置值为10的重复项。 如果不需要,可以在结果中添加.drop_duplicates()

from collections import Counter

df = pd.DataFrame({'ID': [1, 1, 2, 2, 2, 3], 'a': [10, 40, 5, 10, 10, 5]})
>>> df
   ID   a
0   1  10
1   1  40
2   2   5
3   2  10
4   2  10
5   3   5

c = Counter(df.ID)
dups = [n for n in c if c[n] > 1]
mask = df.ID.isin(dups)
result = df.loc[(~mask) | ((mask) & (df.a == 10)), :]
>>> result
   ID   a
0   1  10
3   2  10
4   2  10
5   3   5

>>> result.drop_duplicates()
   ID   a
0   1  10
3   2  10
5   3   5

在短短的过滤值a与下降重复之前:

df = df[df['a']==10]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM