본문 바로가기
자격증/빅분기

[빅분기]유형1 기출

by kime2 2024. 6. 19.

 

Big Data Certification KR (kaggle.com)

 

 

1) 데이터에서 IQR을 활용해 Fare컬럼의 이상치를 찾고, 이상치 데이터의 여성 수를 구하시오

[py] T1-1. 이상치를 찾아라(IQR활용) Expected Questions | Kaggle

# 라이브러리 및 데이터 불러오기
import pandas as pd
df = pd.read_csv('../input/titanic/train.csv')

# IQR 구하기
Q1 = df['Fare'].quantile(0.25)
Q3 = df['Fare'].quantile(0.75)
IQR = Q3-Q1

# 이상치 데이터 구하기
# 이상치 = Q1-IQR*1.5
# 이상치 = Q3+IQR*1.5
out1 = df[df['Fare'] <  Q1-IQR*1.5]
out2 = df[df['Fare'] >  Q3+IQR*1.5]

# 이상치 데이터에서 여성 수 구하기, 출력하기 print()
len(out2)

ans = df[(df['Fare'] >  Q3+IQR*1.5)&(df['Sex']=='female')]
print(len(ans))

 

배운점

IQR = 데이터.quantile(0.75) - 데이터.quantile(0.25)

 

2)T1-2.주어진 데이터에서 이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 'age' 평균을 구한 다음 모두 더하여 출력하시오

[py] T1-2. 이상치를 찾아라(소수점 나이) Expected Questions (kaggle.com)

# 라이브러리 및 데이터 불러오기
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# 소수점 데이터 찾기
df.head()
df['age'] = df['age'].map(lambda x : x if x%1 > 0 else 0)
df['age_out'] = df[df['age'] !=0]['age']

# 이상치를 포함한 데이터 올림, 내림, 버림의 평균값 
import numpy as np
out = df[df['age_out']!=0]['age_out']
out_ceil = np.ceil(df[df['age_out']!=0]['age_out']).mean()
out_floor= np.floor(df[df['age_out']!=0]['age_out']).mean()
out_trunc = np.trunc(df[df['age_out']!=0]['age_out']).mean()

# 평균값 더한 다음 출력
ans = out_ceil + out_floor +out_trunc
print(ans)

배운점

올림 = np.ceil(~)
내림 = np.floor(~)

버림 = np.trunc(~)

 

3) 주어진 데이터에서 결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하세요!

[py] T1-3. 결측치 처리(map 활용) Expected Questions | Kaggle

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# EDA - 결측값 확인(비율 확인)
# df.info()
#f1의 결측 비율
print(df['f1'].isnull().sum()/100*100)
print(df['f3'].isnull().sum()/100*100)

# 80%이상 결측치 컬럼, 삭제
df.drop(columns = 'f3',inplace=True)

# 80%미만 결측치 컬럼, city별 중앙값으로 대체
df.head()
a = df[df['city']=='경기']['f1'].median()
b = df[df['city']=='대구']['f1'].median()
c = df[df['city']=='부산']['f1'].median()
d = df[df['city']=='서울']['f1'].median()
dic = {'경기':a,
      '대구':b,
      '부산':c,
      '서울':d}
df['f1'] = df['f1'].fillna(df['city'].map(dic))

# f1 평균값 결과 출력
ans = df['f1'].mean()
print(ans)

 

배운점

map을 통해 조건에 따라 결측값 채우기 

df['f1'].fillna(df['city'].map(dic))

 

4) 주어진 데이터 중 train.csv에서 'SalePrice'컬럼의 왜도와 첨도를 구한 값과, 'SalePrice'컬럼을 스케일링(log1p)로 변환한 이후 왜도와 첨도를 구해 모두 더한 다음 소수점 2째자리까지 출력하시오

[py] T1-4. 왜도와 첨도 구하기 (로그스케일) Expected Questions | Kaggle

 

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np
df = pd.read_csv("../input/house-prices-advanced-regression-techniques/train.csv")

# 'SalePrice'컬럼 왜도와 첨도계산 
sp_sk =df['SalePrice'].skew()
sp_kur = df['SalePrice'].kurtosis()

# 'SalePrice'컬럼 로그변환
df.loc[:,'SalePrice_log'] = np.log(df['SalePrice'])

# 'SalePrice'컬럼 왜도와 첨도계산 
sp_log_sk =df['SalePrice_log'].skew()
sp_log_kur = df['SalePrice_log'].kurtosis()

# 모두 더한 다음 출력
ans = round(sp_sk+sp_kur+sp_log_sk+sp_log_kur,2)
print(ans)

 

왜도 구하기 : df.skew()

첨도 구하기 : df.kurtosis()

로그 취하기 : np.log(~)

 

5) 주어진 데이터 중 basic1.csv에서 'f4'컬럼 값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오

[py] T1-5. 조건에 맞는 데이터 표준편차 구하기 Expected Questions (kaggle.com)

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head()

# 조건에 맞는 데이터 (ENFJ, INFP)
# 조건에 맞는 f1의 표준편차 (ENFJ, INFP)
ENFJ_std = df[df['f4']=='ENFJ']['f1'].std()
INFP_std = df[df['f4']=='INFP']['f1'].std()

# 두 표준편차 차이 절대값 출력
print(np.abs(ENFJ_std-INFP_std))

 

표준편차 구하기 :df.std()

절댓값 구하기 : np.abs(~)

 

6) 주어진 데이터 중 basic1.csv에서 'f1'컬럼 결측 데이터를 제거하고, 'city'와 'f2'을 기준으로 묶어 합계를 구하고, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오

# 라이브러리 및 데이터 불러오기
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# f1컬럼 결측치 제거
df.dropna(subset = ['f1'],inplace = True)

# 그룹 합계 계산
a = df.groupby(['city','f2'],as_index=False)['f1'].sum()

# 그룹 합계 계산
a = df.groupby(['city','f2'],as_index=False)['f1'].sum()

배운점

컬럼에 따라 결측치 제거하기 : df.dropna(subset =['기준컬럼']

 

7) f4'컬럼의 값이 'ESFJ'인 데이터를 'ISFJ'로 대체하고, 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age'컬럼의 최대값을 출력하시오

https://www.kaggle.com/code/agileteam/py-t1-7-2-expected-questions

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# ESFJ 값을 가진 데이터 확인
df[df['f4']=='ESFJ']

# 값 변경하기
df['f4'] = df['f4'].str.replace('ESFJ','ISFJ')

# 2개의 조건에 맞는 값중 age컬럼의 최대값
ans = df[(df['city']=='경기')&(df['f4'] =='ISFJ')]['age'].max()
print(ans)

 

8) 주어진 데이터 셋에서 'f2' 컬럼이 1인 조건에 해당하는 데이터의 'f1'컬럼 누적합을 계산한다. 이때 발생하는 누적합 결측치는 바로 뒤의 값을 채우고, 누적합의 평균값을 출력한다. (단, 결측치 바로 뒤의 값이 없으면 다음에 나오는 값을 채워넣는다

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np

df= pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# 조건에 따른 누적합
ans = df[df['f2']==1]['f1'].cumsum().fillna(method = 'bfill').mean()
print(ans)

filna()의

method  > 결측값을 변경할 방식

method = 'bfill' : 결측값을 바로 아래 값과 동일

method = 'ffill' : 결측값을 바로 위 값과 동일

 

9) 주어진 데이터에서 'f5'컬럼을 표준화(Standardization (Z-score Normalization))하고 그 중앙값을 구하시오

[py] T1-9. 수치형 변수 표준화 Expected Questions | Kaggle

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler

df= pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# 표준화
scaler = StandardScaler()
df['f5_s'] = scaler.fit_transform(df[['f5']])

# 중앙값 출력
ans = df['f5_s'].median()
print(ans)

표준화 라이브러리

from sklearn.preprocessing import StandardScaler

# 표준화
scaler = StandardScaler()
df['f5_s'] = scaler.fit_transform(df[['f5']])

 

11) 주어진 데이터에서 'f5'컬럼을 min-max 스케일 변환한 후, 상위 5%와 하위 5% 값의 합을 구하시오

[py] T1-11. min-max 기준 상하위 5%값 Expected Questions (kaggle.com)

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

df= pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head(1)

# 표준화
scaler = MinMaxScaler()
df['f5_m'] = scaler.fit_transform(df[['f5']])
# min-max scale 방법2
# df['f5_2'] = df['f5'].transform(lambda x: ((x - x.min()) / (x.max() - x.min())))

up = df['f5_m'].quantile(0.05)
down = df['f5_m'].quantile(0.95)
print( up+down )

최대최소정규화

x-최솟값 / (최댓값 - 최솟값)

MinMaxScaler()

 

13) 주어진 데이터에서 상관관계를 구하고, quality와의 상관관계가 가장 큰 값과, 가장 작은 값을 구한 다음 더하시오!(절댓값으로)
# 단, quality와 quality 상관관계 제외, 소수점 둘째 자리까지 반올림하여 계산

[py] T1-13. 상관관계 구하기 Expected Questions | Kaggle

import pandas as pd
import numpy as np

df = pd.read_csv('../input/red-wine-quality-cortez-et-al-2009/winequality-red.csv')
up = abs(df.corr()['quality'][:-1]).max()
down = abs(df.corr()['quality'][:-1]).min()

print(round(up+down,2))

 상관관계가 작다는 것은 숫자가 작다(음수)가 아니라

-1과 1 사이에서 0에 가까운 것 > 즉 절댓값을 기준으로 min/max를 계산해야 한다

 

14) city와 f4를 기준으로 f5의 평균값을 구한 다음, f5를 기준으로 상위 7개 값을 모두 더해 출력하시오 (소수점 둘째자리까지 출력)

[py] T1-14. 2개 조건에 따른 상위 값 Expected Question | Kaggle

import pandas as pd

df = pd.read_csv("../input/bigdatacertificationkr/basic1.csv")
df2 = df.groupby(['city','f4'],as_index=False)['f5'].mean()
ans = df2.sort_values('f5',ascending=False)['f5'].head(7)
#내림차순으로 정렬
round(ans.sum(),2)

 

15) 주어진 데이터 셋에서 age컬럼 상위 20개의 데이터를 구한 다음 f1의 결측치를 중앙값으로 채운다.

그리고 f4가 ISFJ와 f5가 20 이상인 f1의 평균값을 출력하시오!

[py] T1-15. 슬라이싱 & 조건 Expected Question | Kaggle

# 라이브러리 불러오기
import pandas as pd
url = '../input/bigdatacertificationkr/basic1.csv'
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head()

# age컬럼 상위 20개의 데이터
df2 = df.sort_values('age',ascending=False).head(20)


# f1의 결측치를 중앙값으로 채우기
df2['f1'].fillna(df2['f1'].median(),inplace = True)

# f4가 ISFJ와 f5가 20 이상인 f1의 평균값을 출력하시오!
df2[(df2['f4']=='ISFJ')&(df2['f5']>=20)]['f1'].mean()

 

16) 주어진 데이터 셋에서 f2가 0값인 데이터를 age를 기준으로 오름차순 정렬하고 앞에서 부터 20개의 데이터를 추출한 후 f1 결측치(최소값)를 채우기 전과 후의 분산 차이를 계산하시오 (소수점 둘째 자리까지)

[py] T1-16. 분산 Expected Question | Kaggle

import pandas as pd

# 데이터 불러오기
df = pd.read_csv("../input/bigdatacertificationkr/basic1.csv")

#  f2가 0값인 데이터를 age를 기준으로 오름차순 정렬, 20개
df2 = df[df['f2']==0].sort_values('age').reset_index()[:20]

# f1 결측치(최소값)를 채우기 전과 후의 분산 차이를 계산하시오 (소수점 둘째 자리까지)
var = df2['f1'].var()
varf = df2['f1'].fillna(df2['f1'].min()).var()

print(round(var-varf,2))

 

17)  2022년 5월 sales의 중앙값을 구하시오

[py] T1-17. 시계열 데이터1 Expected Question | Kaggle

import pandas as pd
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv")
df.loc[:,'Date'] = pd.to_datetime(df['Date'])
print(df[(df['Date'].dt.year == 2022)&(df['Date'].dt.month ==5)]['Sales'].median())
# 1477685.0

 

18) 주어진 데이터에서 2022년 5월 주말과 평일의 sales컬럼 평균값 차이를 구하시오 (소수점 둘째자리까지 출력, 반올림)

[py] T1-18. 시계열 데이터2 Expected Question | Kaggle

# 라이브러리 불러오기
import pandas as pd
# 데이터 불러오기 (datatime컬럼 지정)
df = pd.read_csv('../input/bigdatacertificationkr/basic2.csv',parse_dates =['Date'])
df = df[(df['Date'].dt.year ==2022)&(df['Date'].dt.month == 5)]
df['days'] = df['Date'].dt.day_name()
df['days2'] = df['days'].map(lambda x : 1 if x in ('Saturday','Sunday') else 0)
print(round(df[df['days2']==1]['Sales'].mean()-df[df['days2']==0]['Sales'].mean(),2))

날짜형으로된 object데이터를 datetime으로 바꾸기

1. 데이터를 불러올때 바꾸기

pd.read_csv(url, parse_dates = [날짜컬럼])

2. pr.to_datetime(컬럼)

 

19) 주어진 데이터에서 2022년 월별 Sales 합계 중 가장 큰 금액과 023년 월별 Sales 합계 중 가장 큰 금액의 차이를 절대값으로 구하시오. 단 Events컬럼이 '1'인경우 80%의 Salse값만 반영함 (최종값은 소수점 반올림 후 정수 출력)

[py] T1-19. 시계열 데이터3 Expected Question (kaggle.com)

 

# 라이브러리 불러오기
import pandas as pd
#데이터 불러오기
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv", parse_dates = ['Date'])
df['Year']  = df['Date'].dt.year
df['Month'] = df['Date'].dt.month

# Events컬럼이 '1'인경우 80%의 Salse값
def a(x):
    if x['Events']==1:
        return x['Sales']*0.8
    else:
        return x['Sales']
df2 = df.copy()
df2['Sales'] = df2.apply(a, axis =1)

# print(df[df['Events']==1]['Sales'][0])
# print(df2[df2['Events']==1]['Sales'][0])

# 2022년 월별 Sales 합계 중 가장 큰 금액
max_2022 = df2[df2['Year']==2022].groupby(['Month'])['Sales'].sum().max()

# 2023년 월별 Sales 합계 중 가장 큰 금액
max_2023 = df2[df2['Year']==2023].groupby(['Month'])['Sales'].sum().max()

# 2022와 2023차이 + 절댓값 + 정수표현
import numpy as np
print(round(np.abs(max_2022-max_2023),0).astype('int'))

#42473436

 

20) basic1 데이터와 basic3 데이터를 basic1의 'f4'값을 기준으로 병합하고 병합한 데이터에서 r2결측치를 제거한다음, 앞에서 부터 20개 데이터를 선택하고 'f2'컬럼 합을 구하시오

[py] T1-20. 데이터 병합 Expected Question | Kaggle

import pandas as pd
b1 = pd.read_csv("../input/bigdatacertificationkr/basic1.csv")
b3 = pd.read_csv("../input/bigdatacertificationkr/basic3.csv")
# print(b1.info())
# print(b3.info())

# # basic1 데이터와 basic3 데이터를 basic1의 'f4'값을 기준으로 병합
b_df = pd.merge(b1, b3, how='left',on ='f4')
# print(b_df)

# r2를 기준으로 결측치 제거 :  83 non-null
b_df.dropna(subset = ['r2'], inplace=True)
b_df.reset_index(inplace=True)
# b_df.info()

# 앞에서 부터 20개 데이터를 선택하고 'f2'컬럼 합
print(b_df[:20]['f2'].sum())
# 15
  • left: 병합할 첫 번째 데이터프레임
  • right: 병합할 두 번째 데이터프레임
  • how: 병합 방식 ('inner', 'outer', 'left', 'right')
  • on: 병합에 사용할 공통 열 이름
  • left_on, right_on: 각 데이터프레임의 병합 열 이름
  • left_index, right_index: 인덱스를 병합 기준으로 사용할지 여부
  • sort: 결과 데이터프레임을 정렬할지 여부
  • suffixes: 중복되는 열 이름에 붙일 접미사

21) basic1 데이터 중 'age'컬럼 이상치를 제거하고, 동일한 개수로 나이 순으로 3그룹으로 나눈 뒤 각 그룹의 중앙값을 더하시오

[py] T1-21. 구간 분할 Expected Question | Kaggle

## 라이브러리 , 데이터 불러오기
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

## age의 이상치 제거하기 : 0을 포함한 음수, 소수점값
df['age'] = df[(df['age']>0)&(df['age']%1 ==0)]['age']
print('원본:',df.shape)
df = df[df['age']>0]
print('음수제거:',df.shape)
df = df[df['age']%1 ==0]
print('소수점 제거:',df.shape)

## 동일한 개수로 나이 순으로 3그룹으로 나눈 뒤 각 그룹의 중앙값을 더하기
label = ['a','b','c']
df['age_label'] = pd.qcut(df['age'],q =3, labels =label)
ans = df[['age','age_label']].groupby(['age_label'])['age'].median().sum()
print(ans)
# 165
  • cut() 함수는 절대평가 기준으로 데이터를 구간으로 나누는 함수입니다 : bins를 통해 구간을 설정
  • > 데이터의 최소값과 최대값 사이를 사용자가 지정한 구간 수로 균등하게 나눕니다.
  • > 나이를 10세 단위로 구간화할 때 사용할 수 있습니다.
  • qcut() 함수는 상대평가 기준으로 데이터를 구간으로 나누는 함수입니다 : q를 통해 나누고 싶은 구간 개수 설정
  • > 데이터를 사용자가 지정한 구간 수로 나누되, 각 구간의 데이터 개수가 동일하도록 나눕니다.
  • 학생들의 점수를 상위 25%, 중위 50%, 하위 25%로 구간화할 때 사용할 수 있습니다.
import pandas as pd

# 데이터 생성
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

# cut() 사용
bins = [0, 20, 40, 60, 80, 100]
labels = ['A', 'B', 'C', 'D', 'E']
cut_data = pd.cut(data, bins=bins, labels=labels)
print(cut_data)
# [A, A, B, C, C, D, D, E, E, E]

# qcut() 사용
qcut_data = pd.qcut(data, q=5, labels=['A', 'B', 'C', 'D', 'E'])
print(qcut_data)
# [A, A, B, C, C, D, D, E, E, E]

 

조건을 통해 데이터를 제거할 때 shape을 통해 중간중간 비교해보기

 

22) 주 단위 Sales의 합계를 구하고, 가장 큰 값을 가진 주와 작은 값을 가진 주의 차이를 구하시오(절대값)

T1-22. Time-Series4 (Weekly data) (kaggle.com)

# ## 라이브러리 및 데이터 셋 불러오기
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic2.csv',parse_dates = ['Date'])
# df.info()

# # 주 단위 Sales의 합계
df['Week'] = df['Date'].dt.week
df['Year'] = df['Date'].dt.year
df2 = df.groupby(['Year','Week'],as_index= False)['Sales'].sum()


# # 가장 큰 값을 가진 주와 작은 값을 가진 주의 차이를 구하시오(절대값)
up = df2['Sales'].max()
down = df2['Sales'].min()

print(up- down)

 

2022~2023년 사이에 있는 주를 구분하기 위해서는 년, 주를 기준으로 그룹핑해야 한다

dt.week를 사용하면 2022년 3주차랑 2023년 3주차가 모두 합쳐짐

 

또는 datetime화된 ['Date']컬럼을 인덱스로 지정하고

인덱스를resample하는데 'w'기준으로 resample

#date컬럼을 인덱스로 지정
df = df.set_index('Date')

#인덱스를 주를 기준으로 그룹화하여 각 컬럼의sum을 집계함
df_w= df.resample('W').sum()

 

23) f1의 결측치를 채운 후 age 컬럼의 중복 제거 전과 후의 'f1' 중앙값 차이를 구하시오

결측치는 'f1' 데이터에서 큰 값 순으로 정렬했을 때 10번째에 위치한 값으로 채운다.

중복 데이터 발생시 뒤에 나오는 데이터를 삭제함

T1-23. 중복 데이터 제거 Drop Duplicates | Kaggle

import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.info()

## f1의 결측치 채우기 :  'f1' 데이터에서 큰 값 순으로 정렬했을 때 10번째에 위치한 값 > 재정렬을 하면 인덱스를 재설정해줘야 함
df= df.sort_values('f1', ascending=False).reset_index()

fil = df['f1'].loc[9]
print(df['f1'].loc[9])
# 88

print('원본',df['f1'].isnull().sum())

df['f1'].fillna(value = fil,inplace=True)
print('결측치 대체',df['f1'].isnull().sum())

## age 중복제거 > df2개 : 중복 데이터 발생시 뒤에 나오는 데이터를 삭제
print('원본',df.shape)
d_m = df['f1'].median()
print('원본',d_m)

df2 = df.drop_duplicates(subset=['age'],keep = 'first').reset_index()
print('중복제거',df2.shape)
d2_m = df2['f1'].median()
print('중복제거',d2_m)

##  age 컬럼의 중복 제거 전과 후의 'f1' 중앙값 차이 > 절대
print(abs(d_m-d2_m))

 

정렬을 하든, 결측/중복값 제거를 하든 인덱스를 재 정렬하기!!

 

24) 주어진 데이터(basic2.csv)에서 "pv"컬럼으로 1일 시차(lag)가 있는 새로운 컬럼을 만들고(예: 1월 2일에는 1월 1일 pv데이터를 넣고, 1월 3일에는 1월 2일 pv데이터를 넣음),새로운 컬럼의 1월 1일은 다음날(1월 2일)데이터로 결측치를 채운 다음, Events가 1이면서 Sales가 1000000이하인 조건에 맞는 새로운 컬럼 합을 구하시오

T1-24. Time-Series5 (Lagged Feature) 시차 데이터 생성 | Kaggle

import pandas as pd

# %% [code] {"execution":{"iopub.status.busy":"2022-11-23T06:34:39.584781Z","iopub.execute_input":"2022-11-23T06:34:39.585083Z","iopub.status.idle":"2022-11-23T06:34:39.624987Z","shell.execute_reply.started":"2022-11-23T06:34:39.585042Z","shell.execute_reply":"2022-11-23T06:34:39.624218Z"}}
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv")
df

## "pv"컬럼으로 1일 시차(lag)가 있는 새로운 컬럼
df['lag'] =df['PV'].shift(1)

## 새로운 컬럼의 1월 1일은 다음날(1월 2일)데이터로 결측치를 채운 다음
df['lag'].fillna(df.iloc[0]['PV'],inplace = True)
# 397349
##동일한 작업 : 뒤에있는 데이터로 채우기
## df['previous_PV'] = df['previous_PV'].fillna(method = 'bfill')

# Events가 1이면서 Sales가 1000000이하인 조건에 맞는 새로운 컬럼 합
ans = df[(df['Events']==1)&(df['Sales']<=1000000)]['lag'].sum()

print(ans)
## 1894876

shift(숫자) : 특정한 컬럼의 행 올리기, 내리기

 

 

 

 

 

'자격증 > 빅분기' 카테고리의 다른 글

[빅분기] 3유형  (0) 2024.06.21
[빅분기] 2유형  (0) 2024.06.20
[빅분기] 판다스 전처리 100제  (0) 2024.06.18