이 글에서는 Python의 pandas와 numpy를 활용해 1부터 100 사이의 무작위 정수 30개로 데이터프레임을 생성한 뒤, 각 행(row)별로 최댓값 ÷ 최솟값을 계산하는 방법을 소개합니다.
실행 결과 미리 보기
각 행의 최댓값을 최솟값으로 나눈 결과는 다음과 같습니다.
0 43.000000 1 1.911111 2 2.405405 3 20.000000 4 7.727273 5 6.333333
그럼 해결 절차를 단계별로 살펴보겠습니다.
해결 방법
1단계: 데이터프레임 생성
numpy의 np.random.randint(1, 100, 30) 함수를 사용해 1 이상 100 미만의 무작위 정수 30개를 생성하고, reshape(6, 5)를 적용하여 6행 × 5열의 2차원 배열 형태로 변환한 후 데이터프레임으로 만듭니다.
df = pd.DataFrame(np.random.randint(1,100,30).reshape(6,5))
2단계: apply와 lambda로 행 단위 계산
pandas의 apply() 메서드 안에 lambda 함수를 넣어 np.max(x) / np.min(x)를 계산합니다. 이때 axis=1로 설정하면 열 방향이 아닌 행 단위로 연산이 수행됩니다. 결과는 max_of_min 변수에 저장합니다.
max_of_min = df.apply(lambda x: np.max(x)/np.min(x), axis=1)
3단계: 결과 출력
마지막으로 max_of_min 값을 출력하면 각 행별 계산 결과를 확인할 수 있습니다.
전체 예제 코드
아래 전체 코드를 실행하면 동작 과정을 한눈에 파악할 수 있습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,100,30).reshape(6,5))
print("Dataframe is:\n",df)
max_of_min = df.apply(lambda x: np.max(x)/np.min(x), axis=1)
print("maximum by minimum of each row:\n",max_of_min)출력 결과
Dataframe is:
0 1 2 3 4
0 2 13 4 15 86
1 60 53 86 75 45
2 37 85 40 89 88
3 67 33 80 4 74
4 85 71 11 67 81
5 56 85 95 15 94
maximum by minimum of each row:
0 43.000000
1 1.911111
2 2.405405
3 20.000000
4 7.727273
5 6.333333
dtype: float64핵심 포인트 정리
np.random.randint(1, 100, 30): 1 이상 100 미만 범위에서 무작위 정수 30개 생성reshape(6, 5): 1차원 배열을 6행 × 5열의 2차원 구조로 변환df.apply(..., axis=1): 행 단위 연산을 수행하는 핵심 옵션- 결과값의 자료형은 실수인
float64로 반환됩니다.
참고로 무작위 값이 사용되므로 실행할 때마다 데이터프레임의 내용은 달라지지만, 계산 로직은 동일하게 적용됩니다.