Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 1~100 사이 무작위 값 30개 데이터프레임 생성 후 각 행의 최댓값÷최솟값 계산하기

이 글에서는 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로 반환됩니다.

참고로 무작위 값이 사용되므로 실행할 때마다 데이터프레임의 내용은 달라지지만, 계산 로직은 동일하게 적용됩니다.