๋ฐ์ํ
์๋ ๊ธ์ Pandas์์ DataFrame ๋ฐ์ดํฐ ์ ๋ ฌ๊ณผ ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
์ฃผ์ ๋ฉ์๋์ธ sort_values(), sort_index() ๋ฟ๋ง ์๋๋ผ nlargest(), nsmallest(), reindex(), ๊ทธ๋ฆฌ๊ณ sort_values()์ key ํ๋ผ๋ฏธํฐ๊น์ง ์ดํด๋ณผ ๊ฒ์ด๋ค.
1. DataFrame.sort_values()
- ์ด(column) ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ํต์ฌ์ ์ธ ๋ฉ์๋(method)
- by ํ๋ผ๋ฏธํฐ์ ๊ธฐ์ค ์ด(๋๋ ์ด์ ๋ฆฌ์คํธ)์ ์ง์ ํ๊ณ , ascending์ผ๋ก ์ค๋ฆ์ฐจ์/๋ด๋ฆผ์ฐจ์์ ์ค์ ํจ
# pandas.__version__
# 2.2.3
import pandas as pd
df = pd.DataFrame({
'A': [3, 1, 2, 4],
'B': [10, 50, 20, 20],
'C': ['b', 'a', 'b', 'c']
})
# 1) ๋จ์ผ ์ด ๊ธฐ์ค ์ ๋ ฌ
df_sorted_single = df.sort_values(by='A')
print(df_sorted_single)
# A B C
# 1 1 50 a
# 2 2 20 b
# 0 3 10 b
# 3 4 20 c
# 2) ์ฌ๋ฌ ์ด ๊ธฐ์ค ์ ๋ ฌ
df_sorted_multi = df.sort_values(by=['B', 'A'], ascending=[True, False])
print(df_sorted_multi)
# A B C
# 0 3 10 b
# 3 4 20 c
# 2 2 20 b
# 1 1 50 a
ํ๋ผ๋ฏธํฐ ์ฃผ์ ์ ๋ฆฌ
- by: ์ ๋ ฌ ๊ธฐ์ค ์ด ์ด๋ฆ(๋ฌธ์์ด) ๋๋ ์ด ์ด๋ฆ ๋ฆฌ์คํธ
- ascending: ๊ธฐ๋ณธ๊ฐ์ True(์ค๋ฆ์ฐจ์)์ด๋ฉฐ, ์ฌ๋ฌ ์ด์ ์ง์ ํ ๊ฒฝ์ฐ [True, False] ๋ฑ ๋ฆฌ์คํธ๋ก๋ ์ค์ ๊ฐ๋ฅ
- inplace: True๋ก ํ๋ฉด ์๋ณธ DataFrame์ ์์ ํจ
- na_position: NaN ๊ฐ์ ์์น๋ฅผ 'first' ๋๋ 'last'๋ก ์ง์ (๊ธฐ๋ณธ๊ฐ์ 'last')
- key: (Pandas 1.1.0+ ๋ฒ์ ) ์ด์ ํจ์๋ฅผ ์ ์ฉํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ ์์
# ์์: ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ ๋ ฌ
df.sort_values(by='C', key=lambda col: col.str.lower())
2. DataFrame.sort_index()
- ์ธ๋ฑ์ค(ํ ๋ผ๋ฒจ)์ด๋ ์ปฌ๋ผ ๋ผ๋ฒจ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๋ ์ฌ์ฉํจ
- axis ํ๋ผ๋ฏธํฐ๋ก ํ ์ธ๋ฑ์ค(axis=0) ๋๋ ์ด(axis=1) ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ ์์
# pandas.__version__
# 2.2.3
import pandas as pd
df = pd.DataFrame({
'A': [3, 1, 2],
'B': [2, 3, 1]
}, index=['c', 'a', 'b'])
# ์ธ๋ฑ์ค๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
df_sorted_index = df.sort_index()
print(df_sorted_index)
# A B
# a 1 3
# b 2 1
# c 3 2
# ์ธ๋ฑ์ค๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
df_sorted_index_desc = df.sort_index(ascending=False)
print(df_sorted_index_desc)
# A B
# c 3 2
# b 2 1
# a 1 3
# ์ปฌ๋ผ๋ช
์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
df_sorted_columns = df.sort_index(axis=1)
print(df_sorted_columns)
# A B
# c 3 2
# a 1 3
# b 2 1
ํ๋ผ๋ฏธํฐ ์ฃผ์ ์ ๋ฆฌ
- axis: ๊ธฐ๋ณธ๊ฐ 0(ํ ์ธ๋ฑ์ค), 1์ด๋ฉด ์ด ๊ธฐ์ค ์ ๋ ฌ
- ascending: ๊ธฐ๋ณธ๊ฐ True
- inplace: True๋ก ํ๋ฉด ์๋ณธ์ ๋ฐ์
728x90
๋ฐ์ํ
3. nlargest(), nsmallest()
- ํน์ ์ด ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ํฐ(๋๋ ๊ฐ์ฅ ์์) n๊ฐ ํ์ ๋น ๋ฅด๊ฒ ๋ฝ์๋ด๋ ๋ฉ์๋
- ์ ๋ ฌ ํ ์์ n๊ฐ๋ง ์ทจํ๋ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ ํ์ฉ ๊ฐ๋ฅํ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ ๋์ด์์
- ์ฌ๋ฌ ์ด์ ๋์์ผ๋ก ํ ์ ์์ง๋ง, ์ฃผ๋ก ๋จ์ผ ์ด ๊ธฐ์ค์ผ๋ก ์ฐ์
# ์์ 3๊ฐ
df_top3 = df.nlargest(3, 'B')
# A B
# a 1 3
# c 3 2
# b 2 1
# ํ์ 3๊ฐ
df_bottom3 = df.nsmallest(3, 'B')
# A B
# b 2 1
# c 3 2
# a 1 3
4. reindex()
- ์ธ๋ฑ์ค(ํ/์ด)์ ์๋กญ๊ฒ ๋งคํํ๋ ๋ฉ์๋
- ์ ๋ ฌ ์ ์ฉ ๋ฉ์๋๋ ์๋์ง๋ง, ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ reindexํ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ๋ ฌ ํจ๊ณผ๊ฐ ๋ํ๋จ
sorted_idx = sorted(df.index) # ์ ๋ ฌ๋ ์ธ๋ฑ์ค ๋ฆฌ์คํธ
df_reindexed = df.reindex(sorted_idx)
print(df_reindexed)
# A B
# a 1 3
# b 2 1
# c 3 2
5. ๋ฉํฐ ์ธ๋ฑ์ค(MultiIndex)์ ์ ๋ ฌ
- MultiIndex๋ฅผ ์ฌ์ฉ ์ค์ด๋ฉด level ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ํน์ ๋ ๋ฒจ ์์๋๋ก ์ ๋ ฌํ ์ ์์
- ์์ ์๋ sortlevel()์ด๋ผ๋ ๋ฉ์๋๊ฐ ์์์ผ๋, ํ์ฌ๋ sort_index(level=...)๋ก ๋์ฒด๋์์
df_multi = df.sort_index(level=[0, 1], ascending=[True, False])
์ ๋ฆฌ
- sort_values()
- ์ด ๊ธฐ์ค ์ ๋ ฌ ๋ฉ์๋. ์ค๋ฆ์ฐจ์/๋ด๋ฆผ์ฐจ์, ์ฌ๋ฌ ์ด ๋์ ์ ๋ ฌ ๊ฐ๋ฅ
- ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋จ
- key ํ๋ผ๋ฏธํฐ๋ก ์ปค์คํ ์ ๋ ฌ๋ ๊ฐ๋ฅ
- sort_index()
- ์ธ๋ฑ์ค(ํ/์ด ๋ผ๋ฒจ) ๊ธฐ์ค ์ ๋ ฌ ๋ฉ์๋
- axis๋ก ํ/์ด์ ๊ตฌ๋ถ, ascending์ผ๋ก ์ ๋ ฌ ๋ฐฉํฅ ์ง์
- nlargest(), nsmallest()
- ์ง์ ๋ ์ด์์ ์์/ํ์ n๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ
- ์ผ์ข ์ ‘๋ถ๋ถ ์ ๋ ฌ’์ ํด๋นํ๋ฉฐ, ์๋๊ฐ ๋ ์ ๋ฆฌํ ์ ์์
- reindex()
- ์ ๋ ฌ์ด๋ผ๊ธฐ๋ณด๋ค๋, ์๋ก์ด ์ธ๋ฑ์ค ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก DataFrame ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฐฐ์ดํ๋ ๋ฉ์๋
- ์ํ๋ ๋๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ์ง์ ํ ์ ์์
- ๋ฉํฐ ์ธ๋ฑ์ค ์ ๋ ฌ
- sort_index(level=...)๋ฅผ ํตํด ๋ ๋ฒจ๋ณ๋ก ์ธ๋ฐํ ์ ๋ ฌ ๊ฐ๋ฅ
๋ณดํต์ sort_values()์ sort_index()๋ง ์ ๋๋ก ์์๋ ์ ๋ ฌ ์์
์ ๋ค ํด๊ฒฐ ๊ฐ๋ฅํจ
์ถ๊ฐ์ ์ผ๋ก ์ํ์ ๋ฐ์ดํฐ๋ง ๋น ๋ฅด๊ฒ ๋ฝ๊ณ ์ถ๋ค๋ฉด nlargest(), nsmallest()๋ฅผ ์ฐ๋ฉด ๋จ
key ํ๋ผ๋ฏธํฐ๋ ๋ฉํฐ ์ธ๋ฑ์ค ๋ฑ, ์กฐ๊ธ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ ์์ ์ ์์ผ๋ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ฉด ๋จ
๋ฐ์ํ
'๊ฐ๋ฐ Code > ํ์ด์ฌ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python][numpy] Numpy ๋ฐฐ์ด ์ ์ฅ ๋ฐ ๋ถ๋ฌ์ค๊ธฐ (0) | 2025.02.09 |
---|---|
[Python][numpy] Numpy ๊ธฐ์ด๋ถํฐ ํ์ฉ๊น์ง (0) | 2025.02.08 |
[Python][pandas] ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ - Excel (1) | 2025.01.22 |
[Python][pandas] ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ - CSV (0) | 2025.01.22 |
[Python][pandas] pandas ํบ์๋ณด๊ธฐ (0) | 2025.01.22 |