- sql 의 group by 와 같다!
df.groupby("Team")["Points"].sum()
위의 결과는 Team들의 Points들의 합을 반환한다.
df.groupby(["Tema","Year"])["Points"].sum()
여러 Column들을 groupby 할 수도 있다.
Groupby 한 결과물은 multilevel index를 가진다.
>>> sum_wegiht = grouped["Weight"].sum()
>>> sum_wegiht
Animal Age
Cat 2 10
4 15
6 12
Dog 1 30
3 25
5 20
Name: Weight, dtype: int64
>>> sum_wegiht.index
MultiIndex([('Cat', 2),
('Cat', 4),
('Cat', 6),
('Dog', 1),
('Dog', 3),
('Dog', 5)],
names=['Animal', 'Age'])
>>> type(sum_wegiht)
<class 'pandas.core.series.Series'>
이 때 결과물의 타입은 Series 타입이다.
unstack()
Pandas에서 unstack() 함수는 Hierarchical index를 가진 데이터를 피벗 테이블 형태로 변환하는 함수입니다. 즉, 열 인덱스의 마지막 레벨을 행 인덱스로 이동시킵니다. 이를 통해 데이터를 다차원 배열 형태로 쉽게 확인할 수 있습니다.
>>> sum_wegiht.unstack()
Age 1 2 3 4 5 6
Animal
Cat NaN 10.0 NaN 15.0 NaN 12.0
Dog 30.0 NaN 25.0 NaN 20.0 NaN
>>> type(sum_wegiht.unstack())
<class 'pandas.core.frame.DataFrame'>
swaplevel 함수
Pandas에서 swaplevel() 함수는 Hierarchical index를 가진 데이터프레임에서 레벨을 바꿀 수 있는 함수입니다. 즉, 인덱스 레벨을 서로 교환할 수 있습니다. 이를 통해 데이터를 다양한 형태로 확인할 수 있습니다.
>>> sum_wegiht.swaplevel()
Age Animal
2 Cat 10
4 Cat 15
6 Cat 12
1 Dog 30
3 Dog 25
5 Dog 20
Name: Weight, dtype: int64
reset_index()
>>> sum_wegiht.reset_index()
Animal Age Weight
0 Cat 2 10
1 Cat 4 15
2 Cat 6 12
3 Dog 1 30
4 Dog 3 25
5 Dog 5 20
인덱스를 다시 풀어준다.
요약
df.groupby([column]) | column 기준으로 group으로 묶어준다. |
여기서의 df는 모두 Hierarchical Index를 가진 data를 말한다. | |
df.unstack() | pivot table로 변환해준다. |
df.swaplevel() | level을 서로 바꾼다. |
df.sort_index(level = 1) | 레벨 인덱스를 기준으로 데이터프레임 정렬한다. |
df.sort_values() | value값 기준으로 정 |
df.reset_index() | index를 다시 만들어준다. |
ss.sum(level = 0) | series기 때문에 함수사용가능, Index level 기준으로 기본연산 수행가능 |
groupby는 Split상태에서 추출이 가능하다.
grouped = df.groupby("Animal")
for name, group in grouped:
print(name)
print(group)
Cat
Animal Age Weight
2 Cat 2 10
3 Cat 4 15
5 Cat 6 12
Dog
Animal Age Weight
0 Dog 3 25
1 Dog 5 20
4 Dog 1 30
get_group
>>> grouped.get_group("Cat")
Animal Age Weight
2 Cat 2 10
3 Cat 4 15
5 Cat 6 12
group 객체에서 해당 그룹의 정보를 가져온다. 위에서는 Cat의 정보를 가져왔다.
Aggregation -> 요약된 추출정보를 추출해준다.
data = {'Animal': ['Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Cat'],
'Age': [3, 2, 5, 4, 1, 6],
'Weight': [25, 10, 20, 15, 30, 12]}
df = pd.DataFrame(data)
grouped = df.groupby('Animal')
result = grouped.agg({'Age': 'mean', 'Weight': 'mean'})
>>>result
Age Weight
Animal
Cat 4.0 12.333333
Dog 3.0 25.000000
마찬가지로 group객체에서 사용가능하다. 여러개의 합산정보를 가져올 수 있다. 위의 코드는 합과 평균을 반환하는 코드이다.
Transformation
transform() 메서드는 GroupBy 객체와 함께 사용되어, 그룹화된 데이터에 대해 각 그룹별로 적용된 결과를 반환합니다.
transform() 메서드는 apply() 메서드와 유사하게 동작하지만, 반환되는 객체의 형태가 다릅니다. apply() 메서드는 원본 DataFrame의 모양과 크기를 그대로 유지하지만, transform() 메서드는 각 그룹 내에서 계산된 결과를 그룹의 크기와 같은 형태로 반환합니다.
grouped = df.groupby('Animal')
result = grouped.transform('mean')
print(result)
Age Weight
0 3.0 25.0
1 4.0 12.3
2 3.0 25.0
3 4.0 12.3
4 3.0 25.0
5 4.0 12.3
transform() 메서드를 사용하여 GroupBy 객체에서 각 그룹에서 계산된 값을 반환할 수 있습니다. 반환되는 객체의 형태는 그룹의 크기와 같으며, apply() 메서드와 달리 각 그룹에서 계산된 값을 원본 DataFrame과 같은 위치에 배치합니다.
Filter
이 메서드는 GroupBy 객체와 함께 사용되어, 각 그룹에서 조건에 따라 특정 데이터를 선택하여 반환합니다.
filter() 메서드는 조건 함수를 사용하여 각 그룹의 데이터를 필터링합니다. 조건 함수는 불리언 값을 반환하며, 그룹의 데이터 중에서 조건이 참인 데이터만 선택하여 반환합니다.
grouped = df.groupby('Animal')
result = grouped.filter(lambda x: x['Age'].mean() > 3)
print(result)
Animal Age Weight
2 Dog 5 20
5 Cat 6 12
group.get_group | 그룹의 정보를 가져온다. |
group.agg() | 요약된 추출정보 제공 |
group.transform(function) | 데이터 변환 |
group.filter(function) | function에 맞는 값들 filtering 해서 보여줌. |
'AI > Pandas' 카테고리의 다른 글
Merge & Concat, persistence (0) | 2023.03.12 |
---|---|
Pivot table, Crosstab (1) | 2023.03.12 |
map, replace, apply, built-in 함수들 (0) | 2023.03.12 |
Series, Dataframe 생성, indexing, selection (0) | 2023.03.12 |
- sql 의 group by 와 같다!
df.groupby("Team")["Points"].sum()
위의 결과는 Team들의 Points들의 합을 반환한다.
df.groupby(["Tema","Year"])["Points"].sum()
여러 Column들을 groupby 할 수도 있다.
Groupby 한 결과물은 multilevel index를 가진다.
>>> sum_wegiht = grouped["Weight"].sum()
>>> sum_wegiht
Animal Age
Cat 2 10
4 15
6 12
Dog 1 30
3 25
5 20
Name: Weight, dtype: int64
>>> sum_wegiht.index
MultiIndex([('Cat', 2),
('Cat', 4),
('Cat', 6),
('Dog', 1),
('Dog', 3),
('Dog', 5)],
names=['Animal', 'Age'])
>>> type(sum_wegiht)
<class 'pandas.core.series.Series'>
이 때 결과물의 타입은 Series 타입이다.
unstack()
Pandas에서 unstack() 함수는 Hierarchical index를 가진 데이터를 피벗 테이블 형태로 변환하는 함수입니다. 즉, 열 인덱스의 마지막 레벨을 행 인덱스로 이동시킵니다. 이를 통해 데이터를 다차원 배열 형태로 쉽게 확인할 수 있습니다.
>>> sum_wegiht.unstack()
Age 1 2 3 4 5 6
Animal
Cat NaN 10.0 NaN 15.0 NaN 12.0
Dog 30.0 NaN 25.0 NaN 20.0 NaN
>>> type(sum_wegiht.unstack())
<class 'pandas.core.frame.DataFrame'>
swaplevel 함수
Pandas에서 swaplevel() 함수는 Hierarchical index를 가진 데이터프레임에서 레벨을 바꿀 수 있는 함수입니다. 즉, 인덱스 레벨을 서로 교환할 수 있습니다. 이를 통해 데이터를 다양한 형태로 확인할 수 있습니다.
>>> sum_wegiht.swaplevel()
Age Animal
2 Cat 10
4 Cat 15
6 Cat 12
1 Dog 30
3 Dog 25
5 Dog 20
Name: Weight, dtype: int64
reset_index()
>>> sum_wegiht.reset_index()
Animal Age Weight
0 Cat 2 10
1 Cat 4 15
2 Cat 6 12
3 Dog 1 30
4 Dog 3 25
5 Dog 5 20
인덱스를 다시 풀어준다.
요약
df.groupby([column]) | column 기준으로 group으로 묶어준다. |
여기서의 df는 모두 Hierarchical Index를 가진 data를 말한다. | |
df.unstack() | pivot table로 변환해준다. |
df.swaplevel() | level을 서로 바꾼다. |
df.sort_index(level = 1) | 레벨 인덱스를 기준으로 데이터프레임 정렬한다. |
df.sort_values() | value값 기준으로 정 |
df.reset_index() | index를 다시 만들어준다. |
ss.sum(level = 0) | series기 때문에 함수사용가능, Index level 기준으로 기본연산 수행가능 |
groupby는 Split상태에서 추출이 가능하다.
grouped = df.groupby("Animal")
for name, group in grouped:
print(name)
print(group)
Cat
Animal Age Weight
2 Cat 2 10
3 Cat 4 15
5 Cat 6 12
Dog
Animal Age Weight
0 Dog 3 25
1 Dog 5 20
4 Dog 1 30
get_group
>>> grouped.get_group("Cat")
Animal Age Weight
2 Cat 2 10
3 Cat 4 15
5 Cat 6 12
group 객체에서 해당 그룹의 정보를 가져온다. 위에서는 Cat의 정보를 가져왔다.
Aggregation -> 요약된 추출정보를 추출해준다.
data = {'Animal': ['Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Cat'],
'Age': [3, 2, 5, 4, 1, 6],
'Weight': [25, 10, 20, 15, 30, 12]}
df = pd.DataFrame(data)
grouped = df.groupby('Animal')
result = grouped.agg({'Age': 'mean', 'Weight': 'mean'})
>>>result
Age Weight
Animal
Cat 4.0 12.333333
Dog 3.0 25.000000
마찬가지로 group객체에서 사용가능하다. 여러개의 합산정보를 가져올 수 있다. 위의 코드는 합과 평균을 반환하는 코드이다.
Transformation
transform() 메서드는 GroupBy 객체와 함께 사용되어, 그룹화된 데이터에 대해 각 그룹별로 적용된 결과를 반환합니다.
transform() 메서드는 apply() 메서드와 유사하게 동작하지만, 반환되는 객체의 형태가 다릅니다. apply() 메서드는 원본 DataFrame의 모양과 크기를 그대로 유지하지만, transform() 메서드는 각 그룹 내에서 계산된 결과를 그룹의 크기와 같은 형태로 반환합니다.
grouped = df.groupby('Animal')
result = grouped.transform('mean')
print(result)
Age Weight
0 3.0 25.0
1 4.0 12.3
2 3.0 25.0
3 4.0 12.3
4 3.0 25.0
5 4.0 12.3
transform() 메서드를 사용하여 GroupBy 객체에서 각 그룹에서 계산된 값을 반환할 수 있습니다. 반환되는 객체의 형태는 그룹의 크기와 같으며, apply() 메서드와 달리 각 그룹에서 계산된 값을 원본 DataFrame과 같은 위치에 배치합니다.
Filter
이 메서드는 GroupBy 객체와 함께 사용되어, 각 그룹에서 조건에 따라 특정 데이터를 선택하여 반환합니다.
filter() 메서드는 조건 함수를 사용하여 각 그룹의 데이터를 필터링합니다. 조건 함수는 불리언 값을 반환하며, 그룹의 데이터 중에서 조건이 참인 데이터만 선택하여 반환합니다.
grouped = df.groupby('Animal')
result = grouped.filter(lambda x: x['Age'].mean() > 3)
print(result)
Animal Age Weight
2 Dog 5 20
5 Cat 6 12
group.get_group | 그룹의 정보를 가져온다. |
group.agg() | 요약된 추출정보 제공 |
group.transform(function) | 데이터 변환 |
group.filter(function) | function에 맞는 값들 filtering 해서 보여줌. |
'AI > Pandas' 카테고리의 다른 글
Merge & Concat, persistence (0) | 2023.03.12 |
---|---|
Pivot table, Crosstab (1) | 2023.03.12 |
map, replace, apply, built-in 함수들 (0) | 2023.03.12 |
Series, Dataframe 생성, indexing, selection (0) | 2023.03.12 |