在Python Pandas中,如何基于DataFrame中另外两列的值删除一列中的重复项?

bvpmtnay  于 2022-12-16  发布在  Python
关注(0)|答案(2)|浏览(206)

我在Python Pandas中有DataFrame,如下所示:
数据类型:

  • ID -整数
  • 类型-对象
  • TG_A -整数
  • TG_B -整数

| 识别号|类型|TG_A| TG_B|
| - ------|- ---------------------------------------------------|- ------|- ------|
| 一百一十一|A类|一个|无|
| 一百一十一|B|一个|无|
| 二百二十二|B| 1个|无|
| 二百二十二|A类|1个|无|
| 三百三十三|B|无|1个|
| 三百三十三|A类|无|1个|
我需要删除上面DataFrame中的重复项,以便:

  • 如果我的DF中ID的值重复-〉删除TYPE = B且TG_A = 1或TYPE = A且TG_B = 1的行

因此,作为一个结果,我需要像下面这样的东西:

ID  | TYPE | TG_A | TG_B
----|------|------|-----
111 | A    | 1    | 0
222 | A    | 1    | 0
333 | B    | 0    | 1

在Python Pandas中我如何才能做到这一点?

daolsyd0

daolsyd01#

可以使用两个布尔掩码和groupby.idxmax来获取第一个不匹配的值:

m1 = df['TYPE'].eq('B') & df['TG_A'].eq(1)
m2 = df['TYPE'].eq('A') & df['TG_B'].eq(1)

out = df.loc[(~(m1|m2)).groupby(df['ID']).idxmax()]

输出:

ID TYPE  TG_A  TG_B
0  111    A     1     0
3  222    A     1     0
4  333    B     0     1
qhhrdooz

qhhrdooz2#

df[df['TYPE'].eq('A').eq(df['TG_A'])]

result

ID  TYPE    TG_A    TG_B
0   111 A       1       0
3   222 A       1       0
4   333 B       0       1

相关问题