使用NumPy检查结果趋势

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)

Meh*_*ebi 5

不使用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)

我希望这可以帮到你.

干杯.