[英]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.