我有一个看起来像这样的数据框:(处理有多个可能的字符变量,我只是简化了问题)
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
我只想保留ID与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
总和:
A : 1
B : 1
C : 2
我有任何ida如何解决这个问题,可能是循环中的循环,但我是Python /熊猫的初学者谢谢
答案 0 :(得分:5)
您可以按ID分组并根据唯一行的条件数== 1
过滤行df1 = df.loc[df.groupby('ID').Treatment.filter(lambda x: x.nunique()==1).index]
或者@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
获得独特的计数
df1.groupby('Treatment').ID.nunique()
Treatment
A 1
B 1
C 2