2016-06-13 62 views
1

我正在嘗試使用'groupby'製表條件的變化,但我很難過,並且會很感激任何指導。我有一個數據幀,如下所示:PANDAS依靠條件

SUBJECT TYPE 
1   1 
1   2 
1   2 
2   1 
2   1 
3   1 
3   3 
3   5 

我想生成以表格形式列出的任何積極的變化的聲明中,忽略任何負變化,併產生每個受試者變化的計數。例如,的輸出上面會:

Subject TYPE 
1   1 
2   0 
3   2 

我是否需要創建一個使用熊貓的if/else語句,或者是有一個更簡單的方法來實現這一目標使用峯會?也許像...

def tabchange(type, subject): 
    current_subject = subject[0] 
    type_diff = type - type 
    j = 1 
    for i in range(1,len(type)): 
     type_diff[i] = type[i] - type[i-j] 
     if subject[i] == current_subject: 
      if type_diff[i] > 0: 
       new_row = 1 
       j += 1 
      else: 
       j = 1 
     else: 
      new_row[i] = 0 
      current_subject = subject[i] 
    return new_row 
+0

你能請張貼的實際代碼:之後,再由SUBJECT分組,結果由TYPE列計數True S上的號碼獲得? – wind85

+0

@@ AMS您可以通過正面和負面的變化來定義您的意思 – Merlin

+0

當差異發生時,會發生正面變化:row2 - row1> 0;當差異row2 - row1 <0時會導致負面變化 – AMS

回答

1
import pandas as pd 
df = pd.DataFrame({'SUBJECT': [1, 1, 1, 2, 2, 3, 3, 3], 
        'TYPE': [1, 2, 2, 1, 1, 1, 3, 5]}) 
grouped = df.groupby('SUBJECT') 
df['TYPE'] = grouped['TYPE'].diff() > 0 
result = grouped['TYPE'].agg('sum') 

產生

SUBJECT 
1 1.0 
2 0.0 
3 2.0 
Name: TYPE, dtype: float64 

以上,dfSUBJECT分組和Diff在拍攝TYPE列:

In [253]: grouped = df.groupby('SUBJECT'); df['TYPE'] = grouped['TYPE'].diff() > 0 

In [254]: df 
Out[254]: 
    SUBJECT TYPE 
0  1 False 
1  1 True 
2  1 False 
3  2 False 
4  2 False 
5  3 False 
6  3 True 
7  3 True 
In [255]: result = grouped['TYPE'].agg('sum'); result 
Out[255]: 
SUBJECT 
1 1.0 
2 0.0 
3 2.0 
Name: TYPE, dtype: float64