[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
필요 모듈 호출
import pandas as pd
import numpy as np
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity="all"
# 데이터 생성
data = {
"도시": ["서울", "서울", "서울", "부산",
"부산", "부산", "인천", "인천"],
"연도": ["2015", "2010", "2005", "2015",
"2010", "2005", "2015", "2010"],
"인구": [9904312, 9631482, 9762546, 3448737,
3393191, 3512547, 2890451, 263203],
"지역": ["수도권", "수도권", "수도권", "경상권",
"경상권", "경상권", "수도권", "수도권"]
}
columns = ["도시", "연도", "인구", "지역"]
df1 = pd.DataFrame(data, columns=columns)
df1
도시 | 연도 | 인구 | 지역 | |
---|---|---|---|---|
0 | 서울 | 2015 | 9904312 | 수도권 |
1 | 서울 | 2010 | 9631482 | 수도권 |
2 | 서울 | 2005 | 9762546 | 수도권 |
3 | 부산 | 2015 | 3448737 | 경상권 |
4 | 부산 | 2010 | 3393191 | 경상권 |
5 | 부산 | 2005 | 3512547 | 경상권 |
6 | 인천 | 2015 | 2890451 | 수도권 |
7 | 인천 | 2010 | 263203 | 수도권 |
# 각 도시에 대한 연도별 평균 인구
df1.pivot('도시', '연도', '인구')
연도 | 2005 | 2010 | 2015 |
---|---|---|---|
도시 | |||
부산 | 3512547.0 | 3393191.0 | 3448737.0 |
서울 | 9762546.0 | 9631482.0 | 9904312.0 |
인천 | NaN | 263203.0 | 2890451.0 |
# 각 지역별 도시에 대한 연도별 평균 인구
df1.pivot(['지역','도시'], '연도', '인구')
연도 | 2005 | 2010 | 2015 | |
---|---|---|---|---|
지역 | 도시 | |||
경상권 | 부산 | 3512547.0 | 3393191.0 | 3448737.0 |
수도권 | 서울 | 9762546.0 | 9631482.0 | 9904312.0 |
인천 | NaN | 263203.0 | 2890451.0 |
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')[['age','sex','class','fare','survived']]
df.head()
age | sex | class | fare | survived | |
---|---|---|---|---|---|
0 | 22.0 | male | Third | 7.2500 | 0 |
1 | 38.0 | female | First | 71.2833 | 1 |
2 | 26.0 | female | Third | 7.9250 | 1 |
3 | 35.0 | female | First | 53.1000 | 1 |
4 | 35.0 | male | Third | 8.0500 | 0 |
# 선실 등급별 숙박객의 생존자 수
pd.pivot_table(df, index='class', columns='survived', values='sex', aggfunc='size')
survived | 0 | 1 |
---|---|---|
class | ||
First | 80 | 136 |
Second | 97 | 87 |
Third | 372 | 119 |
# 각 선실 등급별 숙박객의 생존자 수와 평균 나이
pd.pivot_table(df, index='class', columns='survived',
values='age', aggfunc='mean')
survived | 0 | 1 |
---|---|---|
class | ||
First | 43.695312 | 35.368197 |
Second | 33.544444 | 25.901566 |
Third | 26.555556 | 20.646118 |
# 생존자/사망자의 최소, 최대 나이(성별별)
pd.pivot_table(df, index=['survived'], columns='sex',
values=['age'], aggfunc=['min','max'])
min | max | |||
---|---|---|---|---|
age | age | |||
sex | female | male | female | male |
survived | ||||
0 | 2.00 | 1.00 | 57.0 | 74.0 |
1 | 0.75 | 0.42 | 63.0 | 80.0 |
언스태킹(unstacking) : 로우 인덱스와 그 값이 컬럼 레이블과 값으로 회전시킴
# single level columns
df = pd.DataFrame([[0, 1], [2, 3]],
index=['cat', 'dog'],
columns=['weight', 'height'])
df
weight | height | |
---|---|---|
cat | 0 | 1 |
dog | 2 | 3 |
⬇stacking⬇
df.stack()
cat weight 0
height 1
dog weight 2
height 3
dtype: int64
multicol = pd.MultiIndex.from_tuples([('weight','kg'),
('weight','pounds')])
df2 = pd.DataFrame([[0, 1], [2, 3]],
index=['cat', 'dog'],
columns=multicol)
df2
weight | ||
---|---|---|
kg | pounds | |
cat | 0 | 1 |
dog | 2 | 3 |
⬇stacking⬇
# 마지막 레벨로 이동
df2.stack()
weight | ||
---|---|---|
cat | kg | 0 |
pounds | 1 | |
dog | kg | 2 |
pounds | 3 |
multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'),
('height', 'm')])
df3 = pd.DataFrame([[None, 1.0], [2.0, 3.0]],
index=['cat', 'dog'],
columns=multicol2)
df3
weight | height | |
---|---|---|
kg | m | |
cat | NaN | 1.0 |
dog | 2.0 | 3.0 |
⬇stacking⬇
# 스태킹 결과 마지막 레벨로 이동
df3.stack()
# 스태킹 결과 첫번째 레벨로 이동
df3.stack(0)
# 두 단계 레벨 모두 이동
df3.stack([0,1])
height | weight | ||
---|---|---|---|
cat | m | 1.0 | NaN |
dog | kg | NaN | 2.0 |
m | 3.0 | NaN |
kg | m | ||
---|---|---|---|
cat | height | NaN | 1.0 |
dog | height | NaN | 3.0 |
weight | 2.0 | NaN |
cat height m 1.0
dog height m 3.0
weight kg 2.0
dtype: float64
# 스태킹 결과 결측치 행 포함
df3.stack(dropna=False)
height | weight | ||
---|---|---|---|
cat | kg | NaN | NaN |
m | 1.0 | NaN | |
dog | kg | NaN | 2.0 |
m | 3.0 | NaN |
# 스태킹 결과 결측치 행 삭제
df3.stack(dropna=True)
height | weight | ||
---|---|---|---|
cat | m | 1.0 | NaN |
dog | kg | NaN | 2.0 |
m | 3.0 | NaN |
index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
('two', 'a'), ('two', 'b')])
s = pd.Series(np.arange(1.0, 5.0), index=index)
s
one a 1.0
b 2.0
two a 3.0
b 4.0
dtype: float64
⬇unstacking⬇
s.unstack() #default = level = -1
s.unstack(level=0) # 첫번째 레벨로
a | b | |
---|---|---|
one | 1.0 | 2.0 |
two | 3.0 | 4.0 |
one | two | |
---|---|---|
a | 1.0 | 3.0 |
b | 2.0 | 4.0 |
키에 의해서 결정되는 데이터가 여러 개 있는 경우 미리 지정한 연산을 통해 각 그룹 데이터의 대표값을 계산하는 것
만약 키가 지정하는 조건에 맞는 데이터가 하나 이상이라서 데이터 그룹을 이루는 경우에는 그룹의 특성을 보여주는 그룹분석을 해야 함
그룹 연산 메서드 사용 가능
data=pd.DataFrame({
'key1':['A','A','B','B','A'] ,
'key2': ['one', 'two', 'one', 'two' , 'one'],
'data1':[1,2,3,4,5],
'data2':[10,20,30,40,50]})
data
key1 | key2 | data1 | data2 | |
---|---|---|---|---|
0 | A | one | 1 | 10 |
1 | A | two | 2 | 20 |
2 | B | one | 3 | 30 |
3 | B | two | 4 | 40 |
4 | A | one | 5 | 50 |
gr = data.groupby(data.key1) # key1 하나로
gr
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000024A8A28E370>
groups 속성 : GroupBy object
gr.groups
gr.ngroups # ngroups는 groups의 수를 반환한다.
{'A': [0, 1, 4], 'B': [2, 3]}
2
그룹화된 결과 접근
# 그룹 내용 출력함수 정의
def print_groups(group_object):
for name, group in group_object:
print(name)
print(group[:5])
print_groups(gr)
A
key1 key2 data1 data2
0 A one 1 10
1 A two 2 20
4 A one 5 50
B
key1 key2 data1 data2
2 B one 3 30
3 B two 4 40
-> 각 그룹은 그룹명과 일치하는 값들의 로우들로 구성된 데이터프레임을 하나씩 포함하고 있음
그룹정보 groups를 데이터프레임으로 저장
grDF = pd.DataFrame(gr)
grDF
0 | 1 | |
---|---|---|
0 | A | key1 key2 data1 data2 0 A one 1 ... |
1 | B | key1 key2 data1 data2 2 B one 3 ... |
grDF.loc[0]
grDF.loc[0].values
0 A
1 key1 key2 data1 data2
0 A one 1 ...
Name: 0, dtype: object
array(['A',
key1 key2 data1 data2
0 A one 1 10
1 A two 2 20
4 A one 5 50], dtype=object)
grDF.loc[1]
grDF.loc[1].values
0 B
1 key1 key2 data1 data2
2 B one 3 ...
Name: 1, dtype: object
array(['B',
key1 key2 data1 data2
2 B one 3 30
3 B two 4 40], dtype=object)
메소드
gr.size() # 각 그룹의 크기 반환
gr.count() # 각 그룹의 컬럼별 아이템 개수 반환
groups.sum() # 각 그룹의 컬럼별 합계 반환
key1
A 3
B 2
dtype: int64
key2 | data1 | data2 | |
---|---|---|---|
key1 | |||
A | 3 | 3 | 3 |
B | 2 | 2 | 2 |
data1 | data2 | |
---|---|---|
key1 | ||
A | 8 | 80 |
B | 7 | 70 |
선택한 컬럼에 대한 그룹별 합계 반환1
groups['data1'].sum() # groups.sum()['data1']
key1
A 8
B 7
Name: data1, dtype: int64
선택한 컬럼에 대한 그룹별 합계 반환2
groups[['data1']].sum() # groups.sum()[['data1']]
data1 | |
---|---|
key1 | |
A | 8 |
B | 7 |
gr2 = data.groupby([data.key1, data.key2])
gr2
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000024A8A02A970>
그룹정보, 그룹수 확인
gr2.groups # 복수 컬럼으로 된 그룹정보 : 튜플형태로 반환
gr2.ngroups
{('A', 'one'): [0, 4], ('A', 'two'): [1], ('B', 'one'): [2], ('B', 'two'): [3]}
4
그룹정보 출력 : print_groups()함수 정의
print_groups(gr2)
('A', 'one')
key1 key2 data1 data2
0 A one 1 10
4 A one 5 50
('A', 'two')
key1 key2 data1 data2
1 A two 2 20
('B', 'one')
key1 key2 data1 data2
2 B one 3 30
('B', 'two')
key1 key2 data1 data2
3 B two 4 40
예제 데이터
data
data2 = data.copy()
data2 = data2.set_index(['key1','key2'])
data2
key1 | key2 | data1 | data2 | |
---|---|---|---|---|
0 | A | one | 1 | 10 |
1 | A | two | 2 | 20 |
2 | B | one | 3 | 30 |
3 | B | two | 4 | 40 |
4 | A | one | 5 | 50 |
data1 | data2 | ||
---|---|---|---|
key1 | key2 | ||
A | one | 1 | 10 |
two | 2 | 20 | |
B | one | 3 | 30 |
two | 4 | 40 | |
A | one | 5 | 50 |
레벨0(key1)을 사용해 그룹화
print_groups(data2.groupby(level=0))
A
data1 data2
key1 key2
A one 1 10
two 2 20
one 5 50
B
data1 data2
key1 key2
B one 3 30
two 4 40
레벨1(key2)을 사용해 그룹화
print_groups(data2.groupby(level=1))
one
data1 data2
key1 key2
A one 1 10
B one 3 30
A one 5 50
two
data1 data2
key1 key2
A two 2 20
B two 4 40
예제 데이터 : iris
import seaborn as sns
iris = sns.load_dataset("iris")
iris
sepal_length | sepal_width | petal_length | petal_width | species | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
... | ... | ... | ... | ... | ... |
145 | 6.7 | 3.0 | 5.2 | 2.3 | virginica |
146 | 6.3 | 2.5 | 5.0 | 1.9 | virginica |
147 | 6.5 | 3.0 | 5.2 | 2.0 | virginica |
148 | 6.2 | 3.4 | 5.4 | 2.3 | virginica |
149 | 5.9 | 3.0 | 5.1 | 1.8 | virginica |
150 rows × 5 columns
픔종별로 그룹화
# iris 품종별로 그룹
igr = iris.groupby(iris.species)
igr
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000024A8A2ADFD0>
품종별 합계 계산
igr.sum()
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
species | ||||
setosa | 250.3 | 171.4 | 73.1 | 12.3 |
versicolor | 296.8 | 138.5 | 213.0 | 66.3 |
virginica | 329.4 | 148.7 | 277.6 | 101.3 |
품종별 평균 계산
igr.mean()
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
species | ||||
setosa | 5.006 | 3.428 | 1.462 | 0.246 |
versicolor | 5.936 | 2.770 | 4.260 | 1.326 |
virginica | 6.588 | 2.974 | 5.552 | 2.026 |
품종별 기술통계
igr.describe()
sepal_length | sepal_width | ... | petal_length | petal_width | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | count | mean | ... | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | |
species | |||||||||||||||||||||
setosa | 50.0 | 5.006 | 0.352490 | 4.3 | 4.800 | 5.0 | 5.2 | 5.8 | 50.0 | 3.428 | ... | 1.575 | 1.9 | 50.0 | 0.246 | 0.105386 | 0.1 | 0.2 | 0.2 | 0.3 | 0.6 |
versicolor | 50.0 | 5.936 | 0.516171 | 4.9 | 5.600 | 5.9 | 6.3 | 7.0 | 50.0 | 2.770 | ... | 4.600 | 5.1 | 50.0 | 1.326 | 0.197753 | 1.0 | 1.2 | 1.3 | 1.5 | 1.8 |
virginica | 50.0 | 6.588 | 0.635880 | 4.9 | 6.225 | 6.5 | 6.9 | 7.9 | 50.0 | 2.974 | ... | 5.875 | 6.9 | 50.0 | 2.026 | 0.274650 | 1.4 | 1.8 | 2.0 | 2.3 | 2.5 |
3 rows × 32 columns
igr['sepal_length'].mean()
species
setosa 5.006
versicolor 5.936
virginica 6.588
Name: sepal_length, dtype: float64
igr[['sepal_length','petal_length']].mean()
sepal_length | petal_length | |
---|---|---|
species | ||
setosa | 5.006 | 1.462 |
versicolor | 5.936 | 4.260 |
virginica | 6.588 | 5.552 |
igr['petal_length'].describe()
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
species | ||||||||
setosa | 50.0 | 1.462 | 0.173664 | 1.0 | 1.4 | 1.50 | 1.575 | 1.9 |
versicolor | 50.0 | 4.260 | 0.469911 | 3.0 | 4.0 | 4.35 | 4.600 | 5.1 |
virginica | 50.0 | 5.552 | 0.551895 | 4.5 | 5.1 | 5.55 | 5.875 | 6.9 |
GroupBy.그룹함수(func, *args, **kwargs)
def peak_to_peak_ratio(x):
return x.max() / x.min()
# 함수 반환 값이 수치 스칼라 타입
# 최대값과 최소값의 비율 계산
# 품종별로 사용자 정의함수 peak_to_peak_ratio 연산 적용
igr.agg(peak_to_peak_ratio)
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
species | ||||
setosa | 1.348837 | 1.913043 | 1.900000 | 6.000000 |
versicolor | 1.428571 | 1.700000 | 1.700000 | 1.800000 |
virginica | 1.612245 | 1.727273 | 1.533333 | 1.785714 |
.agg([함수1, 함수2,…])
igr.agg([np.sum, np.mean])
sepal_length | sepal_width | petal_length | petal_width | |||||
---|---|---|---|---|---|---|---|---|
sum | mean | sum | mean | sum | mean | sum | mean | |
species | ||||||||
setosa | 250.3 | 5.006 | 171.4 | 3.428 | 73.1 | 1.462 | 12.3 | 0.246 |
versicolor | 296.8 | 5.936 | 138.5 | 2.770 | 213.0 | 4.260 | 66.3 | 1.326 |
virginica | 329.4 | 6.588 | 148.7 | 2.974 | 277.6 | 5.552 | 101.3 | 2.026 |
igr.agg(['sum', 'mean'])
sepal_length | sepal_width | petal_length | petal_width | |||||
---|---|---|---|---|---|---|---|---|
sum | mean | sum | mean | sum | mean | sum | mean | |
species | ||||||||
setosa | 250.3 | 5.006 | 171.4 | 3.428 | 73.1 | 1.462 | 12.3 | 0.246 |
versicolor | 296.8 | 5.936 | 138.5 | 2.770 | 213.0 | 4.260 | 66.3 | 1.326 |
virginica | 329.4 | 6.588 | 148.7 | 2.974 | 277.6 | 5.552 | 101.3 | 2.026 |
: 어떤 함수나 적용 가능
Top3 산출
def top3_petal_length(df):
return df.sort_values(by="petal_length", ascending=False)[:3]
# 함수 반환값이 수치 집합
iris.groupby(iris.species).apply(top3_petal_length)
sepal_length | sepal_width | petal_length | petal_width | species | ||
---|---|---|---|---|---|---|
species | ||||||
setosa | 24 | 4.8 | 3.4 | 1.9 | 0.2 | setosa |
44 | 5.1 | 3.8 | 1.9 | 0.4 | setosa | |
23 | 5.1 | 3.3 | 1.7 | 0.5 | setosa | |
versicolor | 83 | 6.0 | 2.7 | 5.1 | 1.6 | versicolor |
77 | 6.7 | 3.0 | 5.0 | 1.7 | versicolor | |
72 | 6.3 | 2.5 | 4.9 | 1.5 | versicolor | |
virginica | 118 | 7.7 | 2.6 | 6.9 | 2.3 | virginica |
117 | 7.7 | 3.8 | 6.7 | 2.2 | virginica | |
122 | 7.7 | 2.8 | 6.7 | 2.0 | virginica |
# iris.groupby(iris.species).agg(top3_petal_length)
# 반환값이 수치 스칼라인 경우 적용 가능한데 반환값이 수치 집합 이므로 에러 발생
iris.groupby(iris.species).apply(peak_to_peak_ratio)
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
species | ||||
setosa | 1.348837 | 1.913043 | 1.900000 | 6.000000 |
versicolor | 1.428571 | 1.700000 | 1.700000 | 1.800000 |
virginica | 1.612245 | 1.727273 | 1.533333 | 1.785714 |
수치형자료를 대,중,소 3범주를 갖는 범주형으로 변환 : qcut()
def q3cut(s):
return pd.qcut(s, 3, labels=["소", "중", "대"]).astype(str)
품종별로 petal_length를 대,중,소 3범주로 변환
iris.groupby(iris.species).petal_length.apply(q3cut)
0 소
1 소
2 소
3 중
4 소
..
145 소
146 소
147 소
148 중
149 소
Name: petal_length, Length: 150, dtype: object
품종별로 petal_length를 대,중,소 3범주로 변환된 값을 petal_length_class변수로 추가
iris["petal_length_class"] = iris.groupby(iris.species).petal_length.apply(q3cut)
iris.head(10)
iris.tail(10)
sepal_length | sepal_width | petal_length | petal_width | species | petal_length_class | |
---|---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa | 소 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa | 소 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa | 소 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa | 중 |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa | 소 |
5 | 5.4 | 3.9 | 1.7 | 0.4 | setosa | 대 |
6 | 4.6 | 3.4 | 1.4 | 0.3 | setosa | 소 |
7 | 5.0 | 3.4 | 1.5 | 0.2 | setosa | 중 |
8 | 4.4 | 2.9 | 1.4 | 0.2 | setosa | 소 |
9 | 4.9 | 3.1 | 1.5 | 0.1 | setosa | 중 |
sepal_length | sepal_width | petal_length | petal_width | species | petal_length_class | |
---|---|---|---|---|---|---|
140 | 6.7 | 3.1 | 5.6 | 2.4 | virginica | 중 |
141 | 6.9 | 3.1 | 5.1 | 2.3 | virginica | 소 |
142 | 5.8 | 2.7 | 5.1 | 1.9 | virginica | 소 |
143 | 6.8 | 3.2 | 5.9 | 2.3 | virginica | 대 |
144 | 6.7 | 3.3 | 5.7 | 2.5 | virginica | 중 |
145 | 6.7 | 3.0 | 5.2 | 2.3 | virginica | 소 |
146 | 6.3 | 2.5 | 5.0 | 1.9 | virginica | 소 |
147 | 6.5 | 3.0 | 5.2 | 2.0 | virginica | 소 |
148 | 6.2 | 3.4 | 5.4 | 2.3 | virginica | 중 |
149 | 5.9 | 3.0 | 5.1 | 1.8 | virginica | 소 |
: transform() 메소드는 데이터프레임의 모든 값에 함수를 적용하며, 다음의 특성을 갖는 새 데이터프레임을 반환한다
예제 데이터1
trans_data = pd.DataFrame({'Label' : ['A','C','B','A','C'],
'Values': [0, 1, 2, 3, 4],
'Values2' : [5, 6, 7, 8, 9],
'Other': ['foo','bar','baz','fiz','buz']},
index=list('VWXYZ'))
trans_data
Label | Values | Values2 | Other | |
---|---|---|---|---|
V | A | 0 | 5 | foo |
W | C | 1 | 6 | bar |
X | B | 2 | 7 | baz |
Y | A | 3 | 8 | fiz |
Z | C | 4 | 9 | buz |
Label 컬럼으로 그룹화
groups = trans_data.groupby('Label')
groups
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000024A8A2DE8B0>
print_groups(groups)
A
Label Values Values2 Other
V A 0 5 foo
Y A 3 8 fiz
B
Label Values Values2 Other
X B 2 7 baz
C
Label Values Values2 Other
W C 1 6 bar
Z C 4 9 buz
groups.groups
{'A': ['V', 'Y'], 'B': ['X'], 'C': ['W', 'Z']}
groups.transform(lambda x:x+10)
Values | Values2 | |
---|---|---|
V | 10 | 15 |
W | 11 | 16 |
X | 12 | 17 |
Y | 13 | 18 |
Z | 14 | 19 |
-> ‘Label’과 ‘Other’ 컬럼은 문자열 값들이므로 함수 적용에 실패하여 두 컬럼은 결과에서 제외됨
예제 데이터2
trans_data2 = pd.DataFrame({'Label' : list('ABABAB'),
'Values' : [10, 20, 11, np.nan, 12, 22]})
trans_data2
Label | Values | |
---|---|---|
0 | A | 10.0 |
1 | B | 20.0 |
2 | A | 11.0 |
3 | B | NaN |
4 | A | 12.0 |
5 | B | 22.0 |
groups= trans_data2.groupby('Label')
groups.groups
print_groups(groups)
{'A': [0, 2, 4], 'B': [1, 3, 5]}
A
Label Values
0 A 10.0
2 A 11.0
4 A 12.0
B
Label Values
1 B 20.0
3 B NaN
5 B 22.0
각 그룹의 평균 계산
groups.mean()
Values | |
---|---|
Label | |
A | 11.0 |
B | 21.0 |
결측치(Nan) 채우기
fillna = groups.transform(lambda x : x.fillna(x.mean()))
fillna
Values | |
---|---|
0 | 10.0 |
1 | 20.0 |
2 | 11.0 |
3 | 21.0 |
4 | 12.0 |
5 | 22.0 |
예제 데이터3
df3 = pd.DataFrame({'Label' : list('AABCCC'),
'Values' : [1, 2, 3, 4, np.nan, 8]})
df3
Label | Values | |
---|---|---|
0 | A | 1.0 |
1 | A | 2.0 |
2 | B | 3.0 |
3 | C | 4.0 |
4 | C | NaN |
5 | C | 8.0 |
아이템의 개수가 지정한 최소한의 수를 넘지 않는 그룹을 제외
df3.groupby('Label').filter(lambda x:x.Values.count() > 1)
Label | Values | |
---|---|---|
0 | A | 1.0 |
1 | A | 2.0 |
3 | C | 4.0 |
4 | C | NaN |
5 | C | 8.0 |
NaN이 하나라도 존재하는 그룹 제외
df3.groupby('Label').filter(lambda x:x.Values.isnull().sum() == 0)
Label | Values | |
---|---|---|
0 | A | 1.0 |
1 | A | 2.0 |
2 | B | 3.0 |
전체 데이터셋 평균과의 차이가 2.0이 넘는 그룹 평균을 가진 그룹만 필터링
df3.groupby('Label').mean()
Values | |
---|---|
Label | |
A | 1.5 |
B | 3.0 |
C | 6.0 |
gmean = df3.groupby('Label').mean().mean()
df3.groupby('Label').filter(lambda x: (x.Values.mean()- gmean) > 2.0)
Label | Values | |
---|---|---|
3 | C | 4.0 |
4 | C | NaN |
5 | C | 8.0 |
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!