Pra*_*vat 0 python group-by numpy python-3.x pandas
我有一个如下所述的Dataframe:
PROCESS_NO PROCESS_NAME RESULT_2 RESULT_3
10254 AAA 4.40 46.67
10254 AAA 4.45 48.33
10254 AAA 4.50 50.00
10254 AAA 4.45 48.33
10254 AAA 4.50 50.00
10255 BBB 4.50 50.00
10255 BBB 4.50 50.00
10254 AAA 4.45 48.33
10254 AAA 4.45 48.33
10254 AAA 4.45 48.33
10255 BBB 4.50 51.60
10255 BBB 4.50 52.80
10255 BBB 4.50 56.80
10255 BBB 4.50 51.70
10255 BBB 4.46 57.90
10255 BBB 4.44 52.00
Run Code Online (Sandbox Code Playgroud)
我想检查相应的RESULT_2,RESULT_3值是否与先前的3行值相同或更高,然后在PROCESS_NO,PROCESS NAME中在另一个列组中分配True,否则为false .
我希望我的结果数据帧像这样.
PROCESS_NO PROCESS NAME RESULT_2 CHECK_2 RESULT_3 CHECK_2
10254 AAA 4.40 FALSE 46.67 FALSE
10254 AAA 4.45 FALSE 48.33 FALSE
10254 AAA 4.45 TRUE 48.33 TRUE
10254 AAA 4.45 TRUE 48.33 TRUE
10254 AAA 4.45 TRUE 48.33 TRUE
10254 AAA 4.50 TRUE 50.00 TRUE
10254 AAA 4.45 FALSE 48.33 FALSE
10254 AAA 4.50 TRUE 50.00 TRUE
10255 BBB 4.50 FALSE 50.00 FALSE
10255 BBB 4.50 FALSE 50.00 FALSE
10255 BBB 4.50 TRUE 51.60 TRUE
10255 BBB 4.50 TRUE 52.80 TRUE
10255 BBB 4.50 TRUE 56.80 TRUE
10255 BBB 4.50 TRUE 51.70 FALSE
10255 BBB 4.46 FALSE 57.90 TRUE
10255 BBB 4.44 FALSE 52.00 FALSE
Run Code Online (Sandbox Code Playgroud)
不使用Numpy并以最简单的方式:
import pandas as pd
data = [[10254,'AAA',4.40,46.67],
[10255,'BBB',4.50,50.00],
[10255,'BBB',4.50,50.00],
[10254,'AAA',4.45,48.33],
[10254,'AAA',4.50,50.00],
[10254,'AAA',1.50,10.00],]
dataframe = pd.DataFrame(data, columns=['PROCESS_NO','PROCESS NAME','RESULT_2','RESULT_3'])
dataframe['CHECK_2'] = 'FALSE'
dataframe['CHECK_3'] = 'FALSE'
check2_position = dataframe.columns.get_loc('CHECK_2')
check3_position = dataframe.columns.get_loc('CHECK_3')
for i in range(0,len(dataframe)):
if i >= 3 :
current_result2 = dataframe.iloc[i]['RESULT_2'];
if(current_result2 >= dataframe.iloc[i-1]['RESULT_2'] or
current_result2 >= dataframe.iloc[i-2]['RESULT_2'] or
current_result2 >= dataframe.iloc[i-3]['RESULT_2'] ):
dataframe.iat[i,check2_position] = 'TRUE'
current_result3 = dataframe.iloc[i]['RESULT_3'];
if(current_result3 >= dataframe.iloc[i-1]['RESULT_3'] or
current_result3 >= dataframe.iloc[i-2]['RESULT_3'] or
current_result3 >= dataframe.iloc[i-3]['RESULT_3'] ):
dataframe.iat[i,check3_position] = 'TRUE'
print(dataframe)
Run Code Online (Sandbox Code Playgroud)
结果是你想要的:
PROCESS_NO PROCESS NAME RESULT_2 RESULT_3 CHECK_2 CHECK_3
0 10254 AAA 4.40 46.67 FALSE FALSE
1 10255 BBB 4.50 50.00 FALSE FALSE
2 10255 BBB 4.50 50.00 FALSE FALSE
3 10254 AAA 4.45 48.33 TRUE TRUE
4 10254 AAA 4.50 50.00 TRUE TRUE
5 10254 AAA 1.50 10.00 FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮到你.
干杯.