728x90
- index '2001' 데이터(행)에서 해당 행의 평균보다 큰 값의 개수를 A라 한다.
- index '2003' 데이터(행)에서 해당 행의 평균보다 작은 값의 개수를 B라 한다.
- A와 B를 더한 값을 구하여 답으로 제출하라.
# 데이터 생성(먼저 실행해 주세요)
import pandas as pd
import random
random.seed(2022)
df = pd.DataFrame()
for i in range(0, 5):
list_box = []
for k in range(0, 200):
ran_num = random.randint(1,200)
list_box.append(ran_num)
df[i+2000] = list_box
df = df.T
df.to_csv("data.csv", index=True)
df = pd.read_csv("data.csv", index_col="Unnamed: 0")
# your code
df = df.T
#1
cond = df[2001] > df[2001].mean()
A = len(df[cond])
#2
cond = df[2003] < df[2003].mean()
B = len(df[cond])
#3
print(A+B)
행의 평균을 구하는 법(위처럼 전치행렬로 바꾼 다음 구해줘도 된다)
A = df.loc[2001].mean()
B = df.loc[2003].mean()
행의 평균보다 작은 데이터의 개수
cond = df.loc[2001].mean() > df.loc[2001]
sum(cond)
- 결측 값을 가진 데이터는 바로 뒤에 있는 값으로 대체한 후 (바로 뒤가 결측값이라면 뒤에 있는 데이터 중 가장 가까운 값)
- city와 f2 컬럼 기준으로 그룹합을 계산한 뒤
- views가 세번째로 큰 city(도시) 이름은?
#1
# df.isna().sum()
df = df.fillna(method="bfill")
# df.isna().sum()
#2
df = df.groupby(['city', 'f2']).sum().reset_index()
df = df.sort_values('views', ascending=False)
#3
df.iloc[2, 0]
결측값을 가진 데이터는 바로 뒤에 있는 값으로 대체(바로 뒤가 결측값이라면 뒤에 있는 데이터 중 가장 가까운 값)
df = df.fillna(method="bfill") # 결측값을 바로 뒤에 있는 데이터로 대체
df = df.fillna(method="ffill") # 결측값을 바로 앞에 있는 데이터로 대체
여러 개의 컬럼을 기준으로 그룹합 계산하는 법
df = df.groupby(['컬럼1', '컬럼2']).sum()
이미 그룹핑된 df를 정렬하는 방법
df = df.reset_index()
df = df.sort_values('컬럼명', ascending=False)
- 구독(subscribed) 월별로 데이터 갯수를 구한 뒤
- 가장 작은 구독 수가 있는 월을 구하시오
#1
df['subscribed'] = pd.to_datetime(df['subscribed'])
df['month'] = df['subscribed'].dt.month
df = df.groupby(['month']).count()
#2
df = df.sort_values('subscribed', ascending=True)
print(df.index[0])
월별로 데이터 갯수 구하기
- 먼저, pd.to_datetime(df['컬럼명'])을 사용해서 datetime형식으로 바꿔준다.
- 바꾼 컬럼을 df['컬럼명'].dt.month 로 월을 뽑아내 새로운 컬럼을 만든다.
- groupby사용해서 월을 저장한 새로운 컬럼으로 그룹핑해준다.
df['subscribed'] = pd.to_datetime(df['subscribed'])
df['month'] = df['subscribed'].month
df = df.groupby(['month']).count()
행의 인덱스 값을 구하고 싶을 때
df.index(N)
- 앞에서 부터 50%까지의 데이터에서
- 'target'컬럼이 0 값을 가진 데이터만 활용해
- 'proline'컬럼의 평균을 구하시오 (소수점 절사(버림), 정수형 출력)
#1
cond = len(a) * 0.5
# print(cond)
a = a.loc[:cond,]
# print(a)
#2
cond = a['target'] == 0
a = a[cond]
#3
print(int(a['proline'].mean()))
- s1, s2, s3, s4, s5, s6, 컬럼의 행(row)별 합을 구하고
- 그 합이 0.1보다 큰 값의 수를 구하시오
특정 컬럼의 행별 합을 구하는 법
- 컬럼이 여러개일 경우 list에 넣어서 구하면 더 편하다.
- 데이터프레임 = 데이터프레임[list명] 이렇게 하면 필요한 특정 컬럼만 뽑아낸 데이터프레임이 된다.
- 행별 합은 데이터프레임.sum(axis=1)로 구한다.
#1+2
cols = ['s1', 's2', 's3', 's4', 's5', 's6']
a = a[cols]
print(sum(a.sum(axis=1) > 0.1))
- 고유한 값이 가장 많은 컬럼의 이름은?
고유한 값의 수를 구할 땐 nunique(), 고유한 값을 다 알고 싶을 땐 unique(), 데이터 값 별로 수를 알고 싶을 땐 value_counts()
a = a.nunique()
a = a.sort_values(ascending=False)
print(a.index[0])728x90
'Data > 빅데이터분석기사' 카테고리의 다른 글
| [빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(인코딩, 스케일링), 검증 데이터 분할 (0) | 2025.06.15 |
|---|---|
| [빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(결측치, 이상치) (0) | 2025.06.15 |
| [빅데이터분석기사] 작업형1 모의문제1+2 (0) | 2025.06.13 |
| [빅데이터분석기사] 판다스7-시계열데이터2 (0) | 2025.06.12 |
| [빅데이터분석기사] 판다스6 - 시계열 데이터1 (0) | 2025.06.11 |