我有这个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
答案 0 :(得分:1)
我已将您的数据扩展为包含没有重复项的数据点,并且重复10次重复的数据。
我想通过检查列' ID'中的重复条目来删除重复行,并保留列a中值为10的行。
我将此解释为保留没有重复项的行,并且仅当列a
中的值等于10时才会保留重复项(这将导致相同ID的重复值,其中每个值的值为10)。 / p>
我使用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
答案 1 :(得分:0)
在删除重复项之前,只需过滤a
中的值:
df = df[df['a']==10]