2015-07-20 41 views
3

我是一個使用熊貓的初學者。計數幾個條件的T/F值

我正在尋找幾個患者的突變。我有16個不同的條件。我只是寫一個關於它的代碼,但如何通過for循環來做到這一點?我試圖找到MUT列上的更改並將它們設置爲True和False。然後嘗試計算真/假數字。我已經完成了只有4.

你可以建議一個更簡單的方法,而不是寫16次相同的代碼?

s1=df["MUT"] 
A_T= s1.str.contains("A:T") 
ATnum= A_T.value_counts(sort=True) 

s2=df["MUT"] 
A_G=s2.str.contains("A:G") 
AGnum=A_G.value_counts(sort=True) 

s3=df["MUT"] 
A_C=s3.str.contains("A:C") 
ACnum=A_C.value_counts(sort=True) 

s4=df["MUT"] 
A__=s4.str.contains("A:-") 
A_num=A__.value_counts(sort=True) 
+0

你沒有任何理由只是做'DF [「MUT」] .value_counts()'? – EdChum

回答

1

我不是使用熊貓的專家,所以不知道是否有更乾淨的方法來做到這一點,但也許下面的工作可能?

chars = 'TGC-' 
nums = {} 

for char in chars: 
    s = df["MUT"] 
    A = s.str.contains("A:" + char) 
    num = A.value_counts(sort=True) 
    nums[char] = num 

ATnum = nums['T'] 
AGnum = nums['G'] 
# ...etc 

基本上,經過每個唯一的字符(T,G,C, - ),然後拉出你需要,然後終於在一本字典粘數的值。然後,一旦循環完成,您可以從字典中提取所需的任何數字。

1

只要使用value_counts,這會給你在列中的所有唯一值的計數,無需創建16個變量:

In [5]: 
df = pd.DataFrame({'MUT':np.random.randint(0,16,100)}) 
df['MUT'].value_counts() 

Out[5]: 
6  11 
14 10 
13  9 
12  9 
1  8 
9  7 
15  6 
11  6 
8  5 
5  5 
3  5 
2  5 
10  4 
4  4 
7  3 
0  3 
dtype: int64