π₯ΠΠ°ΠΊ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π² pandas: Π»ΡΡΡΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ pandas Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ set_index() Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ reset_index() Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ΄Π½ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
import pandas as pd
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ°
df.set_index(['ΡΡΠΎΠ»Π±Π΅Ρ1', 'ΡΡΠΎΠ»Π±Π΅Ρ2'], inplace=True)
# Π‘Π±ΡΠΎΡ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ°
df.reset_index(inplace=True)
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΡΠ΅Π·Ρ ΠΈ Π²ΡΠ±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΏΠΎ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ loc[].
# ΠΡΠ±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΡ
df.loc[('Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅1', 'Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅2')]
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ pandas
Pandas - ΡΡΠΎ ΠΌΠΎΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Python, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠ½Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°Π±Π»ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΠΆΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Pandas ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ?
ΠΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π² Pandas. ΠΠ½ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΠΎΠ²Π½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ, ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ. ΠΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ°
ΠΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ `MultiIndex` ΠΌΠΎΠ΄ΡΠ»Ρ `pandas`.
import pandas as pd
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ° Ρ Π΄Π²ΡΠΌΡ ΡΡΠΎΠ²Π½ΡΠΌΠΈ
index = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y'), ('B', 'X'), ('B', 'Y')], names=['ΠΡΡΠΏΠΏΠ°', 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅'])
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ
data = pd.DataFrame({'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 1': [10, 20, 30, 40], 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 2': [50, 60, 70, 80]}, index=index)
# ΠΡΠ²ΠΎΠ΄ ΡΠ°Π±Π»ΠΈΡΡ
data
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ - 'ΠΡΡΠΏΠΏΠ°', Π° Π²ΡΠΎΡΠΎΠΉ ΡΡΠΎΠ²Π΅Π½Ρ - 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅'. Π’Π°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄Π²Π° ΡΡΠΎΠ»Π±ΡΠ°: 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 1' ΠΈ 'ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 2'.
ΠΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ°
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ `loc` ΠΈ `iloc`. ΠΠ΅ΡΠΎΠ΄ `loc` ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π° ΠΌΠ΅ΡΠΎΠ΄ `iloc` - ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
# ΠΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
data.loc['A', 'X']
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π³ΡΡΠΏΠΏΡ 'A' ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 'X'.
# ΠΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
data.iloc[0, 1]
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΈ Π²ΡΠΎΡΠΎΠΌΡ ΡΡΠΎΠ²Π½ΡΠΌ.
ΠΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ
ΠΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π΅Π³ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ°:
data.rename(index={'A': 'Group_A', 'B': 'Group_B'}, level='ΠΡΡΠΏΠΏΠ°')
data.stack()
data.reset_index(level='ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅', drop=True)
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π² Pandas. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°Π±Π»ΠΈΡ Π΄Π°Π½Π½ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΠΎΠ²Π½ΡΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ. ΠΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡΠ»ΡΡΠΈΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ .