# Grouped subset cross row calculation and filter grouped results

Task:Find out stocks that have had three consecutive trading day limits (up 10%).

### Python

 1 import pandas as pd 2 def con_rise(stock:pd.DataFrame): 3 rise_day_list = [] 4 rise_num = 0 5 shift_1 = stock['CL']/stock['CL'].shift(1)-1>=0.1 6 for bl in shift_1: 7 if bl == False: 8 rise_num = 0 9 else: 10 rise_num+=1 11 rise_day_list.append(rise_num) 12 return max(rise_day_list) 13 stock_file = 'E:\\txt\\StockRecords.txt' 14 stock = pd.read_csv(stock_file,sep='\t') 15 stock_g = stock.groupby(by = ['CODE']) 16 good_code = [] 17 for index,group in stock_g: 18 group = group.sort_values(by='DT') 19 group = group.reset_index(drop = True) 20 max_rise = con_rise(group) 21 if max_rise>=5: 22 good_code.append(index) 23 print(good_code)

### esProc

 A 1 E:\\txt\\StockRecords.txt 2 =file(A1).import@t() 3 =A2.group(CODE).(~.sort(DT)) 4 =A3.select(func(A5,~)>=5).(~.CODE) 5 func 6 =(rise=0,A5.(rise=if(CL/CL[-1]-1>=0.1,rise=if(!CL[-1],0,rise+1),0))) 7 =max(B6)

The step-by-step calculation of esProc is very clear: 1. Grouping and sorting; 2. Calculating the maximum days with an increase of more than 0.1; 3. Filtering. The custom function can also be put into the loop function for loop calculation.