如何根据 python 中的多个条件计算列中的唯一行
How to count unique rows in a column based on multiple conditions in python
我有一个看起来像这样的数据框:(处理有多种可能的字符变量,我只是针对问题进行了简化)
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,也就是只用过一次的ID,即使多次处理也保留。之后,我想对每次治疗的 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
我知道如何解决这个问题,也许是循环中的循环,但我是 Python/panda 的初学者,谢谢
您可以按 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
我有一个看起来像这样的数据框:(处理有多种可能的字符变量,我只是针对问题进行了简化)
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,也就是只用过一次的ID,即使多次处理也保留。之后,我想对每次治疗的 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
我知道如何解决这个问题,也许是循环中的循环,但我是 Python/panda 的初学者,谢谢
您可以按 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