파이썬/데이터프레임

python(vscode)/데이터 프레임에서 데이터 검색 조건 걸기, 데이터 이상,이하 이면 다른 열의 데이터 가져오기

gongdol 2023. 10. 29. 16:24
300x250

아래 예제를 이용해 e1 열의 데이터는 15보다 커질때 시점의 name 데이터를 가져오고,

e2 열의 데이터 150 보다 작아질때의 name 값을 가져와보자. 

 

1.예제 준비하기

  1) csv 파일을 준비한다. 

  2) e1, e2 데이터는 데이터가 올라갔다가 다시 떨어지는 포물선 데이터이다.

  3) e1 데이터는 15 기준으로 상승할때, e2 데이터는 150기준으로 하락할때 시점의 앞열의 name 데이터를 가져온다.

 

2. 코드 작성하기

   1) 상승/하락, 이상/이하 조건에 맞으면 값을 3000으로 하는 데이터 열을 각각 추가해준다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import numpy as np
import pandas as pd
 
#1. 데이터 가져오기
filename = r"C:\Users\Documents\test2.csv" #파일명 작성
data = pd.read_csv(filename)        #data 변수에 엑셀 데이터를 넣는다
data1 = data.astype(np.float16)       #용량을 줄여준다. 
col1 = data.columns # 첫번째 칼럼을 col1 변수에 넣는다.
 
## 데이터 위치 찾기 함수 작성.
def timing_check(df, list, col):  #데이터 프레임, 함수 사용전 정의하는 리스트, 데이터 헤더 
    
    #타이밍 데이터 만들기
    result = []
 
    for data_num, condition, upanddown in list: # 엑셀내 데이터 위치, 데이터 조건, 상승인지 하락인지 조건
        lst =[]
        k_1 = 2000
        if upanddown == "up":  #데이터가 상승하는 조건
            for num, s in enumerate(df[col[data_num]]):
                if s >= condition :
                    k=3000
                    if (k - k_1) ==3000 :
                        lst.append(3000)
                        k_1 = 3000
                        result.append([col[data_num], df.loc[num,col[data_num-1]]])
                    else :
                        lst.append(0)
                else:
                    lst.append(0)
                    k_1 = 0
 
        elif upanddown == "down"#데이터가 하락하는 조건
            for num, s in enumerate(df[col[data_num]]):
                if s <= condition :
                    k=3000
                    if (k - k_1) == 3000 :
                        lst.append(3000)
                        k_1 = 3000
                        result.append([col[data_num], df.loc[num,col[data_num-1]]])
                    else :
                        lst.append(0)
                else:
                    lst.append(0)
                    k_1 = 0       
 
        df["timing" + col[data_num]] = pd.Series(lst)
 
    print(df)
    print(result)
        
 
## 함수 사용하기(2가지 이므로 리스트2 개)
list1 = [[1,15"up"], #데이터 열, 이하/이상 조건, 상승경향하락경향
         [3,150"down"]]

timing_check(df = data1, list=list1, col = col1) #함수 사용
 
 
 
 
cs

 

3. 결과

  1) 데이터 2개이므로 타이밍 2개 열이 추가 되었음.

  2) 각 조건에 맞는 name 데이터가 출력되었음.

      -. e1은 11, e2는 15

300x250