删除另一个重复列中具有相同列值的所有行



1.输入:我们有一个数据帧

ID name
1   a
1   b
2   a
2   c
3   d

2.现在我取了第一个重复的"name"(这里是ID为"2"的"a")值,并删除其余的,输出

ID name
1   a
1   b
2   c
3   d

我使用的代码:

df.loc[~df.duplicated(keep='first', subset=['name'])]

3.现在我想删除所有共享相同"ID"的行(这里删除的"a"的ID为"2",所以我们删除所有ID为"2中"的行),最终预期输出:所以我们删除[2c]

ID name
1   a
1   b
3   d

我试过的代码:但它不起作用

dt = df.name.duplicated(keep='first')
df.loc[~df.groupby(['ID','dt']).size().reset_index().drop(columns={0})]

您可以为ID使用某种黑名单:

样本数据:

import pandas as pd
d = {'ID':[1, 1, 2, 2, 3], 'name':['a', 'b', 'a', 'c', 'd']}
df = pd.DataFrame(d)

代码:

df[~df['ID'].isin(df[df['name'].duplicated()]['ID'])]

输出:

ID name
0   1    a
1   1    b
4   3    d

简化代码:

blacklist = df[df['name'].duplicated()]['ID']
mask = ~df['ID'].isin(blacklist)
df[mask]

如果数据帧是按ID排序的,那么这两种方法应该有效:

df = pd.DataFrame(data={'ID': [1, 1, 1, 2, 3], 'name': ['a', 'b', 'a', 'c', 'd']})
df1 = df.loc[~df.duplicated(keep='first', subset=['ID'])]
df2 = df1.loc[~df1.duplicated(keep='first', subset=['name'])]
print(df2)
print(df.drop_duplicates(keep='first', subset=['ID']).drop_duplicates(keep='first', subset=['name']))
ID name
0   1    a
3   2    c
4   3    d

如果它是按名称排序的,你应该做subset=[‘name’],然后子集=[‘ID’]。

相关内容

  • 没有找到相关文章

最新更新