Data Analysis/작업 유형 1 문제 풀이

변수대로, 디폴트는 내림차순, datetime 변경, merge, np.where()

유방울 2023. 6. 22. 22:00

새로 변수 만들었음(head)

-> head 에 그대로 조건을 넣고 추출해야 함

# 나이 순(내림차순)으로 정렬
df = df.sort_values('age', ascending=False).reset_index(drop=True)
#print(df)

# head로 만들었으니까 계속 쭉 이거로 조건에 대한 수치를 추출해야함 
# 그렇지 않으면 
head = df.head(20)
head['f1'] = head['f1'].fillna(head['f1'].median())

cond = (head['f4']=='ISFJ') & (head['f5'] >= 20)
print(head[cond]['f1'].mean())

내림차순 디폴트값

-> 내림인지 오름이지 잘 확인하기

내림차순 -> ascending = True

오름차순 -> ascending = False

cond = (df['f2'] == 0)
# 오름차순 -> 작은 수부터 큰 수
df2 = df[cond].sort_values('age',ascending=True)
df3 = df2.head(20)
#print(df2)
before = df3['f1'].var()
#print(before)
after = df3['f1'].fillna(df3['f1'].min()).var()
#print(after)
print(round(before-after,2))

way1

astype을 이용해 datetime64로 바꾸기

df['Date'] = df['Date'].astype('datetime64')
#print(df.info())
#print(df.head())
con1 = df['Date'] >= '2022-05-01'
con2 = df['Date'] <= '2022-05-31'
print(df[con1&con2]['Sales'].median())

way2

pd.to_datetime 함수 이용 기억 안나면

꼭 help로 찾아보장~

df['Date'] = pd.to_datetime(df['Date'])
#print(df.info())
#print(df.head())
con1 = df['Date'].dt.year == 2022
con2 = df['Date'].dt.month == 5
print(df[con1&con2]['Sales'].median())

~기준으로 병합 -> merge 사용

help로 merge 조인 방법 찾아보기

원하는 칼럼dropna 하려면 그냥 subset 이용하기 

이것도 help 찾아보

df = b1.merge(b3, how='inner', on='f4')
#print(df.info())
#print(help(pd.merge))
# 싯팔 이거 왜 안되는 지 모르겠음 ㅠ 무튼 안 됨..
#df['r2'] = df['r2'].dropna()
#df['r2'].isna().sum()
df = df.dropna(subset=['r2'])
#df['r2'].isna().sum()
df2 = df[:20]
print(df2['f2'].sum())

numpy 함수 이용

조건 true -> 결과값 1

조건 false -> 결과값2

np.where(조건, 결과값1, 결과값2)

int 소숫점 버리기!

round 소숫점 지정숫자만큼 올리기

df['year'] = df['Date'].dt.year
df['month'] = df['Date'].dt.month
#print(df.info())
# 조건이 ture면 -> 결과값 1, false 면 -> 결과값2
# np.where(조건, 결과값1, 결과값2)
df['Sales'] = np.where(df['Events'] == 1, df['Sales']*0.8,df['Sales'] )

df22 = df[df['year'] == 2022]
df23 = df[df['year'] == 2023]
max22 = df22.groupby('month')['Sales'].sum().max()
max23 = df23.groupby('month')['Sales'].sum().max()
# int는 버리기, round 올리기
print(round(abs(max22-max23)))