2017-08-18 54 views
2

我有一個看起來像一個數據幀計數獨特的行:(治療了,我只是簡化了問題字符變量的多個possibily)如何在一列基於Python中多個條件

ID    Position   Treatment 
--20AxECvv-   0   A 
--20AxECvv-   -1   A 
--20AxECvv-   -2   A 
--h9INKewQf-  0   A 
--h9INKewQf-  -1   B 
[email protected]   0   B 
QUeSNEXmdB   0   C 
QUeSNEXmdB   -1   C 
[email protected]   0   C 

我只是想保留身份證,只用一種治療方法,即使是多次身體保持身份證。之後,我想總結每次治療的身份證號碼。其結果將是:

ID    Position   Treatment 
--20AxECvv-   0   A 
--20AxECvv-   -1   A 
--20AxECvv-   -2   A 
[email protected]   0   B 
QUeSNEXmdB   0   C 
QUeSNEXmdB   -1   C 
[email protected]   0   C 

而且總和:

A : 1 
B : 1 
C : 2 

我有什麼IDA如何解決這個問題,也許有一個循環內的循環,但我與Python /熊貓感謝

初學者
+0

如果下一個ID多次治療,你要保留哪一個? – Wen

回答

5

可以GROUPBY 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 [email protected]  0   B 
6 QUeSNEXmdB  0   C 
7 QUeSNEXmdB  -1   C 
8 [email protected]  0   C 

而獲得獨特的計數

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

Treatment 
A  1 
B  1 
C  2 
+1

或跳過索引:'df.groupby('ID')。filter(lambda g:g.Treatment.nunique()== 1)' –

+0

@IgorRaush,是的,這更乾淨。謝謝:) – Vaishali

+0

非常感謝Vaishali和IgorRaush –