如何根据python中的多个条件计算列中的唯一行

Ann*_*ere 2 python loops unique pandas

我有一个看起来像这样的数据框:(处理有多个可能的字符变量,我只是简化了问题)

ID              Position            Treatment
--20AxECvv-         0           A
--20AxECvv-         -1          A
--20AxECvv-         -2          A
--h9INKewQf-        0           A
--h9INKewQf-        -1          B
zZU7a@8jN           0           B
QUeSNEXmdB          0           C
QUeSNEXmdB          -1          C
qu72Ql@h79          0           C
Run Code Online (Sandbox Code Playgroud)

我只想保留身份证与exclusif治疗,换句话说保持身份证,只有一次治疗,即使是几次.之后,我想总结每次治疗的ID数量.结果将是:

ID              Position            Treatment
--20AxECvv-         0           A
--20AxECvv-         -1          A
--20AxECvv-         -2          A
zZU7a@8jN           0           B
QUeSNEXmdB          0           C
QUeSNEXmdB          -1          C   
qu72Ql@h79          0           C
Run Code Online (Sandbox Code Playgroud)

总和:

A : 1 
B : 1
C : 2
Run Code Online (Sandbox Code Playgroud)

我有任何ida如何解决这个问题,也许在循环中循环,但我是Python /熊猫的初学者谢谢

Vai*_*ali 5

您可以分组ID并根据唯一行的条件数== 1过滤行

df1 = df.loc[df.groupby('ID').Treatment.filter(lambda x: x.nunique()==1).index]
Run Code Online (Sandbox Code Playgroud)

或者@Igor Raush建议,

df1 = df.groupby('ID').filter(lambda g: g.Treatment.nunique() == 1)    

    ID          Position    Treatment
0   --20AxECvv-     0           A
1   --20AxECvv-     -1          A
2   --20AxECvv-     -2          A
5   zZU7a@8jN       0           B
6   QUeSNEXmdB      0           C
7   QUeSNEXmdB      -1          C
8   qu72Ql@h79      0           C
Run Code Online (Sandbox Code Playgroud)

并获得独特的数量

df1.groupby('Treatment').ID.nunique()

Treatment
A        1
B        1
C        2
Run Code Online (Sandbox Code Playgroud)