447
420

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pandasใ‹ใ‚‰็งป่กŒใ™ใ‚‹ไบบๅ‘ใ‘ polarsไฝฟ็”จใ‚ฌใ‚คใƒ‰

447
Last updated at Posted at 2022-10-21

pandasใ‹ใ‚‰็งป่กŒใ™ใ‚‹ไบบๅ‘ใ‘ polarsไฝฟ็”จใ‚ฌใ‚คใƒ‰

polarsใฏใ€Pythonใฎ่กจ่จˆ็ฎ—ใƒฉใ‚คใƒ–ใƒฉใƒชใงใ™ใ€‚PythonใงใฏpandasใŒใ“ใฎๅˆ†้‡Žใงใ™ใงใซๆ”ฏ้…็š„ใจใชใฃใฆใ„ใพใ™ใŒใ€polarsใฏใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นไธŠpandasใ‚ˆใ‚Šๅ„ชใ‚Œใฆใ„ใ‚‹ใจใ•ใ‚Œใพใ™ใ€‚ๆœฌ่จ˜ไบ‹ใฏpandasใ‹ใ‚‰polarsใซ็งป่กŒใ™ใ‚‹ไบบใซใจใ‚Šใ‚ใˆใš็ŸฅใฃใฆใŠใในใใ„ใใคใ‹ใฎ็Ÿฅ่ญ˜ใจใƒฆใƒผใ‚นใ‚ฑใƒผใ‚นใ‚’ๆไพ›ใ—ใพใ™ใ€‚

polarsใฏๆ›ดๆ–ฐใŒๆดป็™บใงใ€้ ป็นใซๆ–ฐใ—ใ„้–ขๆ•ฐใฎๅฎŸ่ฃ…ใ‚„ใŸใพใซไป•ๆง˜ๅค‰ๆ›ดใŒ่กŒใ‚ใ‚Œใฆใ„ใพใ™ใ€‚้ƒฝๅบฆใ€ๅ…ฌๅผใฎๆœ€ๆ–ฐใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’็ขบ่ชใ™ใ‚‹ใ“ใจใ‚’ใŠใ™ใ™ใ‚ใ—ใพใ™ใ€‚

ๆœฌ่จ˜ไบ‹ใฎๅ†…ๅฎนใฏใƒใƒผใ‚ธใƒงใƒณ1.1.0 (2024/7/7)ใง็ขบ่ชใ—ใฆใ„ใพใ™ใ€‚ใใ‚Œไปฅๅ‰ใฎๆŒ™ๅ‹•ใซใคใ„ใฆใฏใ“ใฎ่จ˜ไบ‹ใฎ็ทจ้›†ๅฑฅๆญดใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ๅŸบ็คŽ

polarsใฎใƒ‡ใƒผใ‚ฟๆง‹้€ ใฏpandasใจๅŒๆง˜ใงใ™ใ€‚ไธ€ใคใฎไธ€ๆฌกๅ…ƒ้…ๅˆ—ใ‚’ใ‚ทใƒชใƒผใ‚บ๏ผˆpl.Series๏ผ‰ใจๅ‘ผใณใพใ™ใ€‚ใพใŸใ€ไธ€ใคไปฅไธŠใฎใ‚ทใƒชใƒผใ‚บใŒ้›†ใพใฃใฆใงใใŸไบŒๆฌกๅ…ƒ้…ๅˆ—ใ‚’ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๏ผˆpl.DataFrame๏ผ‰ใจๅ‘ผใณใพใ™ใ€‚pandasๅŒๆง˜ใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’ใƒ†ใƒผใƒ–ใƒซใจใ—ใฆใฟใŸใจใใ€ใใ‚Œใžใ‚Œใฎใ‚ทใƒชใƒผใ‚บใฏๅˆ—ใซ็›ธๅฝ“ใ—ใพใ™ใ€‚

ใชใŠpandasใจ้•ใ„ใ€pl.DataFrameใซใฏใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นๅˆ—ใฏๅญ˜ๅœจใ—ใพใ›ใ‚“ใ€‚

polarsใงใฏใ€ๅˆ—ๅใฏๆ–‡ๅญ—ๅˆ—ใงใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚ใพใŸใ€ๅˆ—ๅใฎ้‡่ค‡ใ‚’่จฑๅฏใ—ใพใ›ใ‚“ใ€‚ใชใŠใ€pandasใงใฏๅˆ—ๅใ‚‚ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใชใฃใฆใ„ใพใ™ใŒใ€polarsใซใฏใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใ„ใ†ใ‚‚ใฎใฏๅญ˜ๅœจใ—ใชใ„ใŸใ‚ใ€ๅˆ—ๅ๏ผˆDataFrame.columns๏ผ‰ใฏใŸใ ใฎใƒชใ‚นใƒˆใงไฟๆŒใ•ใ‚Œใฆใ„ใพใ™ใ€‚

ใƒ‡ใƒผใ‚ฟๅž‹

polarsใฎใ‚ทใƒชใƒผใ‚บใฏใ€pandasใฎใใ‚ŒใจๅŒๆง˜ใ€ใƒ‡ใƒผใ‚ฟๅž‹๏ผˆdtype๏ผ‰ใŒๅญ˜ๅœจใ—ใพใ™ใ€‚ไปฅไธ‹ใฏใƒ‡ใƒผใ‚ฟๅž‹ใฎไพ‹ใงใ™ใ€‚

polarsใฎๅž‹ pandas(Numpy)ใฎ้กžไผผใ™ใ‚‹ๅž‹ ่ชฌๆ˜Ž
pl.Int8 ~ pl.Int64 np.int8 ~ np.int64 ็ญ‰ ๆ•ดๆ•ฐ
pl.UInt8 ~ pl.UInt64 np.uint8 ~ np.uint64 ็ญ‰ ๆ•ดๆ•ฐ๏ผˆ็ฌฆๅทใชใ—๏ผ‰
pl.Float32 / pl.Float64 np.float32 / np.float64 ็ญ‰ ๆตฎๅ‹•ๅฐๆ•ฐ
pl.Boolean np.bool / pd.BooleanDtype ็œŸๅฝๅ€ค
pl.String pd.StringDtype ๆ–‡ๅญ—ๅˆ—
pl.Categorical pd.CategoricalDtype ใ‚ซใƒ†ใ‚ดใƒชใƒผ
pl.Enum pd.CategoricalDtype ใ‚ซใƒ†ใ‚ดใƒชใƒผ๏ผˆไบ‹ๅ‰ๅฎš็พฉ๏ผ‰
pl.List - ใƒชใ‚นใƒˆ๏ผˆๅฏๅค‰้•ท๏ผ‰
pl.Array - ใƒชใ‚นใƒˆ๏ผˆๅ›บๅฎš้•ท๏ผ‰
pl.Struct - ๆง‹้€ ๅŒ–้…ๅˆ—
pl.Date - ๆ—ฅไป˜
pl.Time - ๆ™‚ๅˆป๏ผˆๆ—ฅไป˜็„กใ—๏ผ‰
pl.Datetime np.datetime64 ๆ—ฅๆ™‚
pl.Duration np.timedelta64 ๆ™‚้–“๏ผˆๆ™‚ๅˆปใฎๅทฎ๏ผ‰
pl.Object np.object_ ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ
  • pandasใงใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏๆ–‡ๅญ—ๅˆ—ใ‚’ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใƒ‡ใƒผใ‚ฟๅž‹ใงๆ‰ฑใ†ใ‚ˆใ†ใซใชใฃใฆใ„ใพใ™ใ€‚ใใ‚Œใซๅฏพใ—ใฆpolarsใซใฏๆœ€ๅˆใ‹ใ‚‰ๆ–‡ๅญ—ๅˆ—ๅฐ‚็”จใฎใƒ‡ใƒผใ‚ฟๅž‹ใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚
  • pandasใงๆ—ฅไป˜ใ‚’ๆ‰ฑใ†ๅ ดๅˆใฏไธ€่ˆฌ็š„ใซใฏๆ™‚ๅˆปใ‚’0:00:00ใซใ—ใŸๆ—ฅๆ™‚np.datetime64ใงไปฃ็”จใ—ใพใ™ใŒใ€polarsใซใฏๆ—ฅไป˜ใฎใฟใ‚’ๆ‰ฑใ†pl.DateใŒๅญ˜ๅœจใ—ใ€ใพใŸๆ™‚ๅˆปใฎใฟใ‚’ๆ‰ฑใ†pl.Timeใ€ๆ—ฅไป˜๏ผ‹ๆ™‚ๅˆปใ‚’ๆ‰ฑใ†pl.Datetimeใ‚‚ใใ‚Œใžใ‚Œๅญ˜ๅœจใ—ใพใ™ใ€‚
  • ๅž‹ๅค‰ๆ›ใƒกใ‚ฝใƒƒใƒ‰ใ€ใคใพใ‚Špandasใฎ.astype()ใฏใ€polarsใงใฏ.cast()ใงใ™ใ€‚

ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณ๏ผˆpl.Expr()๏ผ‰

polarsใซใฏใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใƒปใ‚ทใƒชใƒผใ‚บใจใฏๅˆฅใซใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใจใ„ใ†ใ‚ฏใƒฉใ‚นใŒๅญ˜ๅœจใ—ใพใ™ใ€‚ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฏใ€Œไธ€้€ฃใฎๆ“ไฝœใฎๅ‘ฝไปคใ€ใ ใจๆ€ใ†ใจใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

ไพ‹ใˆใฐใ€ใ€Œ"A"ๅˆ—ใ‚’้ธๆŠžโ†’3ใงๅ‰ฒใ‚‹โ†’10ใ‚ˆใ‚Šๅฐใ•ใ„ๅ€คใฏ2ๅ€ใ—ใฆๅคงใใ„ๅ€คใฏ2ใงๅ‰ฒใ‚‹โ†’ๅˆ—ๅใ‚’"AA"ใซๅค‰ๆ›ด๏ผˆใ›ใ‚ˆ๏ผ‰ใ€ใจใ„ใ†ใ€Œไธ€้€ฃใฎๆ“ไฝœ๏ผˆใฎๅ‘ฝไปค๏ผ‰ใ€ใ‚’ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใ—ใฆๆŒใคใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚„ใ‚ทใƒชใƒผใ‚บใฎ็‰นๅฎšใฎใƒกใ‚ฝใƒƒใƒ‰ใซไธŽใˆใ‚‹ใ“ใจใงๅฎŸ้š›ใซใใฎๆ“ไฝœใŒ่กŒใ‚ใ‚Œใพใ™ใ€‚

ใ“ใฎใ‚ˆใ†ใซไธ€้€ฃใฎๆ“ไฝœใ‚’ๆŒ‡ๅฎšใ—ใฆใ‹ใ‚‰ๅฎŸ่กŒใ™ใ‚‹ใ“ใจใงใ€ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใฎไธŠๆ˜‡ใŒ่ฆ‹่พผใ‚ใพใ™ใ€‚

ใ‚ทใƒชใƒผใ‚บใจใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฏๅŽŸๅ‰‡ใจใ—ใฆๅŒใ˜ๅๅ‰ใฎๅŒใ˜ๆฉŸ่ƒฝใฎใƒกใ‚ฝใƒƒใƒ‰ใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

ใƒ•ใ‚กใ‚คใƒซ่ชญใฟๆ›ธใ

CSVใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟ่พผใฟ

CSVใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟ่พผใฟใฏpandasๅŒๆง˜read_csv()้–ขๆ•ฐใ‚’ไฝฟใ„ใพใ™ใ€‚็ฌฌไธ€ๅผ•ๆ•ฐใจใ—ใฆใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚นใ‚’ๅ—ใ‘ๅ–ใ‚Šใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’่ฟ”ใ—ใพใ™ใ€‚

read_csv()้–ขๆ•ฐใฎไพ‹
df = pl.read_csv("./example/data.csv")

pandasใฎ้–ขๆ•ฐใจใ‚ญใƒผใƒฏใƒผใƒ‰ใ‚„ๆŒ‡ๅฎšๆ–นๆณ•ใŒ็•ฐใชใ‚‹ๅผ•ๆ•ฐใŒๅญ˜ๅœจใ—ใพใ™ใฎใงๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚ไพ‹ใˆใฐใ€

ๅผ•ๆ•ฐ ๅž‹ ่ชฌๆ˜Ž
separator str ๅˆ—ใฎๅŒบๅˆ‡ใ‚Š่จ˜ๅทใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏ','ใ€‚pandasใฎsepใ€‚
has_header bool 1่กŒ็›ฎใŒใƒ˜ใƒƒใƒ€ใ‹ใฉใ†ใ‹ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏTrueใ€‚
skip_rows int ๅ…ˆ้ ญใ‹ใ‚‰ไฝ•่กŒ่ชญใฟ้ฃ›ใฐใ™ใ‹ใ€‚pandasใจ้•ใ„List[int]ใ‚’ๆธกใ™ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚
columns List[int | str] ไฝฟ็”จใ™ใ‚‹ๅˆ—ใ€‚pandasใฎuse_colsใ€‚
new_columns List[str] ๆ–ฐใ—ใ„ๅˆ—ๅใ€‚ใƒ˜ใƒƒใƒ€ใŒใชใ„ใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚“ใ ๅ ดๅˆใ‚„ใ€ๅ…ƒใฎๅˆ—ๅใ‚’็„ก่ฆ–ใ—ใŸใ„ๅ ดๅˆใซไฝฟใ„ใพใ™ใ€‚
schema_overrides Mapping็ญ‰ ใƒ‡ใƒผใ‚ฟๅž‹ใ€‚ๅˆ—ๆ•ฐใจๅŒใ˜้•ทใ•ใฎใƒชใ‚นใƒˆใ‚„ใ€ๅˆ—ๅใจใใ‚Œใซๅฏพๅฟœใ™ใ‚‹ใƒ‡ใƒผใ‚ฟๅž‹ใฎ่พžๆ›ธใชใฉใŒๆธกใ›ใพใ™ใ€‚
try_parse_dates bool pl.Datetimeใซใ‚ญใƒฃใ‚นใƒˆใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚pandasใฎใ‚ˆใ†ใซ็‰นๅฎšใฎๅˆ—ใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚

ใชใŠใ€polarsใซใฏscan_csv()ใจใ„ใ†้–ขๆ•ฐใ‚‚ใ‚ใ‚Šใพใ™ใ€‚ๅ—ใ‘ๅ–ใ‚‹ๅผ•ๆ•ฐใฏread_csv()้–ขๆ•ฐใจใปใผๅŒใ˜ใงใ™ใ€‚

pl.scan_csv(file)

scan_csv()ใฎๆˆปใ‚Šๅ€คใฏDataFrameใงใฏใชใใ€้…ๅปถ่ฉ•ไพกใ‚’่กŒใ†LazyFrameใงใ™ใ€‚LazyFrameใฏ.collect()ใƒกใ‚ฝใƒƒใƒ‰๏ผˆdaskใฎ.compute()ใซ็›ธๅฝ“๏ผ‰ใŒๅฎŸ่กŒใ•ใ‚Œใ‚‹ใพใง่จˆ็ฎ—ใŒ่กŒใ‚ใ‚Œใชใ„ใจใ„ใ†็‰นๅพดใŒใ‚ใ‚Šใพใ™ใ€‚

ไป–ใฎ้…ๅˆ—ใ‹ใ‚‰ๅค‰ๆ›

pl.DataFrame()ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใ‚’ไฝฟใฃใฆใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’ไฝœๆˆใงใใพใ™ใ€‚ใ“ใฎใจใschemaๅผ•ๆ•ฐใ‚’ๆธกใ™ใจๅˆ—ๅใ‚’่จญๅฎšใงใใพใ™ใ€‚schema=ๅผ•ๆ•ฐใฏๅˆ—ๅใฎใƒชใ‚นใƒˆใ€ใพใŸใฏ๏ฝ›ๅˆ—ๅ๏ผšใƒ‡ใƒผใ‚ฟๅž‹๏ฝใฎ่พžๆ›ธใงๆŒ‡ๅฎšใ—ใพใ™ใ€‚

rng = np.random.default_rng(0)
df = pl.DataFrame(rng.random((8, 4)), schema="ABCD")

df
# shape: (8, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A        โ”† B        โ”† C        โ”† D        โ”‚
# โ”‚ ---      โ”† ---      โ”† ---      โ”† ---      โ”‚
# โ”‚ f64      โ”† f64      โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 0.636962 โ”† 0.269787 โ”† 0.040974 โ”† 0.016528 โ”‚
# โ”‚ 0.81327  โ”† 0.912756 โ”† 0.606636 โ”† 0.729497 โ”‚
# โ”‚ 0.543625 โ”† 0.935072 โ”† 0.815854 โ”† 0.002739 โ”‚
# โ”‚ 0.857404 โ”† 0.033586 โ”† 0.729655 โ”† 0.175656 โ”‚
# โ”‚ 0.863179 โ”† 0.541461 โ”† 0.299712 โ”† 0.422687 โ”‚
# โ”‚ 0.02832  โ”† 0.124283 โ”† 0.670624 โ”† 0.64719  โ”‚
# โ”‚ 0.615385 โ”† 0.383678 โ”† 0.99721  โ”† 0.980835 โ”‚
# โ”‚ 0.685542 โ”† 0.650459 โ”† 0.688447 โ”† 0.388921 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒ‡ใƒผใ‚ฟใจใ—ใฆ๏ฝ›ๅˆ—ๅ๏ผš้…ๅˆ—๏ฝใฎ่พžๆ›ธใ‚’ๆธกใ™ใ“ใจใ‚‚ใงใใพใ™ใ€‚้…ๅˆ—ใฏๅ…จใฆๅŒใ˜้•ทใ•ใงใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใชใŠใ€ใ‚นใ‚ซใƒฉใƒผๅ€คใ‚’ๆธกใ—ใŸๅ ดๅˆใฏใƒ–ใƒญใƒผใƒ‰ใ‚ญใƒฃใ‚นใƒˆใ•ใ‚Œใพใ™ใ€‚

df = pl.DataFrame(
    {
        "Integer": [1, 2, 3, 4],
        "Float": np.array([1, 2, 3, 4], dtype=float),
        "Datetime": [datetime.datetime(2022, 4, 1)] * 4,
        "String": ["test", "train", "test", "train"],
    }
)

df
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎCSVใƒ•ใ‚กใ‚คใƒซๅ‡บๅŠ›

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’CSVใƒ•ใ‚กใ‚คใƒซใจใ—ใฆๅ‡บๅŠ›ใ—ใŸใ„ๅ ดๅˆใฏใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎ.write_csv()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚ใชใŠใ€ใƒ˜ใƒƒใƒ€ใƒผใ‚’ใƒ•ใ‚กใ‚คใƒซใฎ1่กŒ็›ฎใจใ—ใฆๅ‡บๅŠ›ใ—ใชใ„ๅ ดๅˆใฏinclude_header=Falseใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

write_csv()้–ขๆ•ฐใฎไพ‹
df.write_csv("./example/data.csv")

ใชใŠใ€polarsใฎCSVใƒ•ใ‚กใ‚คใƒซๅ‡บๅŠ›้–ขๆ•ฐใฏๆ–‡ๅญ—ใ‚ณใƒผใƒ‰ใ‚’ๆŒ‡ๅฎšใงใใพใ›ใ‚“๏ผˆUTF8ใŒๅผทๅˆถใ•ใ‚Œใพใ™๏ผ‰ใ€‚ๅฎ—ๆ•™็š„็†็”ฑใงUTF8ใงไฟๅญ˜ใ™ใ‚‹ใ“ใจใŒ็ฆใ˜ใ‚‰ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ๆฌกใฎใ‚ˆใ†ใซใ—ใพใ™ใ€‚

Shift-JISใงไฟๅญ˜ใ™ใ‚‹ไพ‹
with open("./example/data.csv", "w", encoding="sjis") as fw:
    fw.write(df.write_csv())

ใ™ใชใ‚ใกใ€.write_csv()ใƒกใ‚ฝใƒƒใƒ‰ใซ็ฌฌไธ€ๅผ•ๆ•ฐ๏ผˆๆ›ธใ่พผใฟๅ…ˆใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚น๏ผ‰ใ‚’ไธŽใˆใชใ‹ใฃใŸๅ ดๅˆใ€ๆˆปใ‚Šๅ€คใจใ—ใฆcsvใฎๆ–‡ๅญ—ๅˆ—ใƒ‡ใƒผใ‚ฟใŒ่ฟ”ใ•ใ‚Œใพใ™ใฎใงใ€ใใ‚Œใ‚’Pythonๆจ™ๆบ–ใฎๆ–นๆณ•ใงใƒ†ใ‚ญใ‚นใƒˆใƒ•ใ‚กใ‚คใƒซใซๆ›ธใ่พผใฟใพใ™ใ€‚

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎ่ฆ–่ฆš็š„็ขบ่ช

print(pl.DataFrame)

ๆจ™ๆบ–ใฎprint()้–ขๆ•ฐใซใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’ๆธกใ™ใจใ€ๆœ€ๅˆใจๆœ€ๅพŒใฎ5่กŒใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚

print(pl.DataFrame({"A": np.arange(100)}))
# shape: (100, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”‚
# โ”‚ --- โ”‚
# โ”‚ i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ก
# โ”‚ 0   โ”‚
# โ”‚ 1   โ”‚
# โ”‚ 2   โ”‚
# โ”‚ 3   โ”‚
# โ”‚ 4   โ”‚
# โ”‚ โ€ฆ   โ”‚
# โ”‚ 95  โ”‚
# โ”‚ 96  โ”‚
# โ”‚ 97  โ”‚
# โ”‚ 98  โ”‚
# โ”‚ 99  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€ๆœ€ๅˆใจๆœ€ๅพŒใฎ่กŒใ‚’ๆŠฝๅ‡บใ™ใ‚‹ใ€pandasใจๅŒๆง˜ใฎ.head()ใจ.tail()ใƒกใ‚ฝใƒƒใƒ‰ใ‚‚ๅฎŸ่ฃ…ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

.glimpse()ใƒกใ‚ฝใƒƒใƒ‰

.glimpse()ใƒกใ‚ฝใƒƒใƒ‰ใงใฏใ€ๆ–‡ๅญ—ๅˆ—ใจใ—ใฆใ€ๅ„ๅˆ—ใฎๅ…ˆ้ ญใฎ่ฆ็ด 10ๅ€‹ใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ๅˆ—ๆ•ฐใŒๅคšใ„ๅ ดๅˆใ€print()ใ‚ˆใ‚Šใ‚‚ใ“ใกใ‚‰ใฎใปใ†ใŒ่ฆ‹ใ‚„ใ™ใ„ใจใ•ใ‚Œใฆใ„ใพใ™ใ€‚

print(df.glimpse())
# Rows: 4
# Columns: 4
# $ Integer           <i64> 1, 2, 3, 4
# $ Float             <f64> 1.0, 2.0, 3.0, 4.0
# $ Datetime <datetime[ฮผs]> 2022-04-01 00:00:00, 2022-04-01 00:00:00, 2022-04-01 00:00:00, 2022-04-01 00:00:00
# $ String            <str> 'test', 'train', 'test', 'train'

print(df) # ๆฏ”่ผƒใฎใŸใ‚ๅ†ๆŽฒ
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.describe()ใƒกใ‚ฝใƒƒใƒ‰

polarsใงใ‚‚ใ€pandasใจใปใผๅŒๆง˜ใฎ.describe()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚่กจ็คบใ•ใ‚Œใ‚‹ๆƒ…ๅ ฑใฏใ€ใƒ‡ใƒผใ‚ฟๆ•ฐใƒปๆฌ ๆๅ€คใฎๆ•ฐใƒปๅนณๅ‡ๅ€คใƒปๆจ™ๆบ–ๅๅทฎใƒปๆœ€ๅฐๅ€คใƒป25%tileๅ€คใƒปไธญๅคฎๅ€คใƒป75%tileๅ€คใƒปๆœ€ๅคงๅ€คใงใ™ใ€‚

df.describe()
# shape: (9, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ statistic  โ”† Integer  โ”† Float    โ”† Datetime            โ”† String โ”‚
# โ”‚ ---        โ”† ---      โ”† ---      โ”† ---                 โ”† ---    โ”‚
# โ”‚ str        โ”† f64      โ”† f64      โ”† str                 โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ count      โ”† 4.0      โ”† 4.0      โ”† 4                   โ”† 4      โ”‚
# โ”‚ null_count โ”† 0.0      โ”† 0.0      โ”† 0                   โ”† 0      โ”‚
# โ”‚ mean       โ”† 2.5      โ”† 2.5      โ”† 2022-04-01 00:00:00 โ”† null   โ”‚
# โ”‚ std        โ”† 1.290994 โ”† 1.290994 โ”† null                โ”† null   โ”‚
# โ”‚ min        โ”† 1.0      โ”† 1.0      โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 25%        โ”† 2.0      โ”† 2.0      โ”† 2022-04-01 00:00:00 โ”† null   โ”‚
# โ”‚ 50%        โ”† 3.0      โ”† 3.0      โ”† 2022-04-01 00:00:00 โ”† null   โ”‚
# โ”‚ 75%        โ”† 3.0      โ”† 3.0      โ”† 2022-04-01 00:00:00 โ”† null   โ”‚
# โ”‚ max        โ”† 4.0      โ”† 4.0      โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่กŒใฎๆŠฝๅ‡บใƒปใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐใƒปๆกไปถ้ธๆŠž

[]ใ‚’ไฝฟใฃใŸ่กŒใฎ้ธๆŠž

่กŒ้ธๆŠžใฏdf[]ใฎ[]ใซๆ•ดๆ•ฐใ‚’ๆธกใ™ใ“ใจใง่กŒใ„ใพใ™๏ผˆPythonๆจ™ๆบ–ใฎใƒชใ‚นใƒˆใจๅŒๆง˜๏ผ‰ใ€‚polarsใซใฏใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นๅˆ—ใŒๅญ˜ๅœจใ—ใชใ„ใŸใ‚ใ€pandasใจ้•ใ„.locใ‚„.ilocใฏๅญ˜ๅœจใ—ใพใ›ใ‚“ใ€‚

# ไธ€่กŒ้ธๆŠž
df[0]
# shape: (1, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

# ่กŒใ‚นใƒฉใ‚คใ‚น
df[1:3]
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.head()ใจ.tail()

.head()ใจ.tail()ใฏpandasใจๅŒๆง˜ใ€ๆœ€ๅˆใƒปๆœ€ๅพŒใฎๆ•ฐ่กŒ๏ผˆใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏ5่กŒ๏ผ‰ใ‚’ๆŠฝๅ‡บใ—ใพใ™ใ€‚

pl.DataFrame(np.arange(15)).head()
# shape: (5, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ column_0 โ”‚
# โ”‚ ---      โ”‚
# โ”‚ i64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 0        โ”‚
# โ”‚ 1        โ”‚
# โ”‚ 2        โ”‚
# โ”‚ 3        โ”‚
# โ”‚ 4        โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.DataFrame(np.arange(15)).tail(3)
# shape: (3, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ column_0 โ”‚
# โ”‚ ---      โ”‚
# โ”‚ i64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 12       โ”‚
# โ”‚ 13       โ”‚
# โ”‚ 14       โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่กŒใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐ๏ผˆ.filter()๏ผ‰

ๆกไปถใซใ‚‚ใจใฅใ„ใฆ็‰นๅฎšใฎ่กŒใ‚’ๆŠฝๅ‡บใ™ใ‚‹ๅ ดๅˆใฏ.filter()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’็”จใ„ใพใ™ใ€‚pandasใฎdf[df["column"] > 3]ใฎใ‚ˆใ†ใชๆ›ธใๆ–นใฏใงใใพใ›ใ‚“ใ€‚

.filter()ใƒกใ‚ฝใƒƒใƒ‰ใงใฏ้€šๅธธใ€ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณ๏ผˆpl.Expr()๏ผ‰ใ‚’ๆธกใ™ใ“ใจใงใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐใ—ใพใ™ใ€‚pandasใฎ.query()ใƒกใ‚ฝใƒƒใƒ‰ใซใ‚„ใ‚„ไผผใฆใ‚‹ใจใ„ใˆใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚ไปฅไธ‹ใฎไพ‹ใงไฝฟ็”จใ—ใฆใ„ใ‚‹pl.col()ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฏๅˆ—้ธๆŠžใ‚’ๆ„ๅ‘ณใ—ใ€๏ผˆๅ˜ไธ€ๅˆ—้ธๆŠžใฎๅ ดๅˆใฏ๏ผ‰ใ‚ทใƒชใƒผใ‚บใจๅŒๆง˜ใฎใƒกใ‚ฝใƒƒใƒ‰ใ‚’ใƒใ‚งใƒผใƒณใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

rng = np.random.default_rng(5)
df_num = pl.DataFrame(rng.integers(0, 10, (6, 3)), schema="ABC")

df_num
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 6   โ”† 8   โ”† 0   โ”‚
# โ”‚ 8   โ”† 4   โ”† 5   โ”‚
# โ”‚ 6   โ”† 2   โ”† 9   โ”‚
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ”‚ 5   โ”† 4   โ”† 1   โ”‚
# โ”‚ 0   โ”† 0   โ”† 0   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num.filter(pl.col("A") > 5)
# shape: (3, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 6   โ”† 8   โ”† 0   โ”‚
# โ”‚ 8   โ”† 4   โ”† 5   โ”‚
# โ”‚ 6   โ”† 2   โ”† 9   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

pandasๅŒๆง˜ใ€andๆกไปถใฏ&ใงใ€orๆกไปถใฏ|ใงใคใชใŽใพใ™ใ€‚&ใ‚„|ใฏ่จˆ็ฎ—ๅ„ชๅ…ˆ้ †ไฝใŒ้ซ˜ใ„ใฎใงใ€ๆ‹ฌๅผง()ใฎไฝ็ฝฎใซๆณจๆ„ใ—ใพใ—ใ‚‡ใ†ใ€‚

df_num.filter((pl.col("A") < pl.col("B")) & (pl.col("C") < 5))
# shape: (2, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 6   โ”† 8   โ”† 0   โ”‚
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

.filter()ใƒกใ‚ฝใƒƒใƒ‰ใซใฏๅผ•ๆ•ฐใ‚’่ค‡ๆ•ฐไธŽใˆใ‚‹ใ“ใจใŒใงใใ€ใใ‚Œใ‚‰ใฏandๆกไปถใจใ—ใฆ่งฃ้‡ˆใ•ใ‚Œใพใ™ใ€‚

# ไธŠใฎไพ‹ใจ็ญ‰ไพก
df_num.filter(
    pl.col("A") < pl.col("B"),
    pl.col("C") < 5,
)
# shape: (2, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 6   โ”† 8   โ”† 0   โ”‚
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ญใƒผใƒฏใƒผใƒ‰ๅผ•ๆ•ฐใ‚’ไธŽใˆใ‚‹ใจpl.col(kwarg) == ใจใ—ใฆ่งฃ้‡ˆใ•ใ‚Œใพใ™ใ€‚

df_num.filter(B=2)  # `df_num.filter(pl.col("B") == 2)`ใจ็ญ‰ไพก
# shape: (2, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 6   โ”† 2   โ”† 9   โ”‚
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num.filter(pl.col("A") < 1, B=2, C=3)
# shape: (1, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚‚ใกใ‚ใ‚“ใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎ่กŒๆ•ฐใจๅŒใ˜้•ทใ•ใฎ็œŸๅฝๅ€ค้…ๅˆ—ใ‚’ๆธกใ™ใ“ใจใ‚‚ใงใใพใ™ใ€‚

df_num.filter([False, True, False, True, True, False])
# shape: (3, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 8   โ”† 4   โ”† 5   โ”‚
# โ”‚ 0   โ”† 2   โ”† 3   โ”‚
# โ”‚ 5   โ”† 4   โ”† 1   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใƒชใ‚นใƒˆใซๅซใพใ‚Œใ‚‹ใ‹ใฉใ†ใ‹ใ‚’ๅˆคๅฎšใ™ใ‚‹Series.is_in()

ใ‚ทใƒชใƒผใ‚บใฎๅ„ๅ€คใŒใ€ๅˆฅใฎใƒชใ‚นใƒˆใฎไธญใซๅซใพใ‚Œใ‚‹ใ‹ใฉใ†ใ‹ใ‚’ๅˆคๅฎšใ™ใ‚‹ใซใฏ.is_in()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’็”จใ„ใพใ™ใ€‚pandasใฎ.isin()ใƒกใ‚ฝใƒƒใƒ‰ใซ็›ธๅฝ“ใ—ใพใ™ใ€‚

df.get_column("Integer").is_in([2, 4, 6])
# shape: (4,)
# Series: 'Integer' [bool]
# [
#     false
#     true
#     false
#     true
# ]

df.filter(pl.col("Integer").is_in([2, 4, 6]))
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒฆใƒ‹ใƒผใ‚ฏ่กŒใƒป้‡่ค‡่กŒ

.unique()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ€pandasใฎ.drop_duplicates()ใซ็›ธๅฝ“ใ—ใ€ๅ€คใŒ้‡่ค‡ใ—ใฆใ„ใ‚‹ใƒ‡ใƒผใ‚ฟใ‚’ๅ‰Š้™คใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

  • subset=ๅผ•ๆ•ฐ๏ผš่ญ˜ๅˆฅใ™ใ‚‹ๅˆ—ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€ๅ…จใฆใฎๅˆ—ใฎๅ€คใŒไธ€่‡ดใ—ใฆใ„ใ‚‹่กŒใฎใฟใŒๅ‰Š้™คใ•ใ‚Œใพใ™ใ€‚
  • keep=ๅผ•ๆ•ฐ๏ผšใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎanyใฏใ€้‡่ค‡่กŒใฎใ†ใกไบˆๆธฌไธๅฏ่ƒฝใช ใ„ใšใ‚Œใ‹1่กŒ ใ‚’ๆฎ‹ใ—ใพใ™ใ€‚keep="first"ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจ้‡่ค‡่กŒใฎใ†ใกๆœ€ๅˆใซๅ‡บ็พใ™ใ‚‹่กŒใŒๆฎ‹ใ•ใ‚Œใพใ™ใ€‚keep="last"ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจๆœ€ๅพŒใซๅ‡บ็พใ™ใ‚‹่กŒใŒๆฎ‹ใ‚Šใพใ™ใ€‚keep="none"ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจ้‡่ค‡่กŒใ‚’ใ™ในใฆๅ‰Š้™คใ—ใพใ™ใ€‚
rng = np.random.default_rng(0)
df_dup = pl.DataFrame(
    {
        "a": ["one", "one", "two", "two", "two", "three", "four"],
        "b": ["x", "y", "x", "y", "x", "x", "x"],
        "c": rng.random(7),
    }
)

df_dup.unique(subset=["a", "b"])
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ a     โ”† b   โ”† c        โ”‚
# โ”‚ ---   โ”† --- โ”† ---      โ”‚
# โ”‚ str   โ”† str โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ one   โ”† x   โ”† 0.636962 โ”‚
# โ”‚ one   โ”† y   โ”† 0.269787 โ”‚
# โ”‚ two   โ”† x   โ”† 0.040974 โ”‚
# โ”‚ two   โ”† y   โ”† 0.016528 โ”‚
# โ”‚ three โ”† x   โ”† 0.912756 โ”‚
# โ”‚ four  โ”† x   โ”† 0.606636 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_dup.unique(subset=["a"])
# shape: (4, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ a     โ”† b   โ”† c        โ”‚
# โ”‚ ---   โ”† --- โ”† ---      โ”‚
# โ”‚ str   โ”† str โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ one   โ”† x   โ”† 0.636962 โ”‚
# โ”‚ two   โ”† x   โ”† 0.040974 โ”‚
# โ”‚ three โ”† x   โ”† 0.912756 โ”‚
# โ”‚ four  โ”† x   โ”† 0.606636 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_dup.unique(subset=["a"], keep="last")
# shape: (4, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ a     โ”† b   โ”† c        โ”‚
# โ”‚ ---   โ”† --- โ”† ---      โ”‚
# โ”‚ str   โ”† str โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ one   โ”† y   โ”† 0.269787 โ”‚
# โ”‚ two   โ”† x   โ”† 0.81327  โ”‚
# โ”‚ three โ”† x   โ”† 0.912756 โ”‚
# โ”‚ four  โ”† x   โ”† 0.606636 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_dup.unique(subset=["a"], keep="none")
# shape: (2, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ a     โ”† b   โ”† c        โ”‚
# โ”‚ ---   โ”† --- โ”† ---      โ”‚
# โ”‚ str   โ”† str โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ three โ”† x   โ”† 0.912756 โ”‚
# โ”‚ four  โ”† x   โ”† 0.606636 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

้‡่ค‡ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใฎ็œŸๅฝๅ€คใฏ.is_duplicated()ใง็ขบ่ชใงใใ€้€†ใซใƒฆใƒ‹ใƒผใ‚ฏใ‹ใฉใ†ใ‹ใฏ.is_unique()ใง็ขบ่ชใงใใพใ™ใŒใ€subset=ใ‚„keep=ๅผ•ๆ•ฐใ‚’ๆธกใ™ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚

df_dup.is_duplicated()
# shape: (7,)
# Series: '' [bool]
# [
#     false
#     false
#     false
#     false
#     false
#     false
#     false
# ]

df_dup.is_unique()
# shape: (7,)
# Series: '' [bool]
# [
#     true
#     true
#     true
#     true
#     true
#     true
#     true
# ]

ๅ…ˆใซๅˆ—ใ‚’็ตžใฃใฆใ‹ใ‚‰.is_duplicated()ใ‚’้ฉ็”จใ™ใ‚‹ใ“ใจใงใ€subsetๅผ•ๆ•ฐใจๅŒใ˜ๅŠนๆžœใŒๅพ—ใ‚‰ใ‚Œใพใ™ใ€‚

df_dup.get_column("a").is_duplicated()
# shape: (7,)
# Series: 'a' [bool]
# [
#     true
#     true
#     true
#     true
#     true
#     false
#     false
# ]

ๅˆ—ใฎ้ธๆŠžใจ่ฟฝๅŠ 

.get_column()ใ‚’ไฝฟใฃใŸใ‚ทใƒชใƒผใ‚บใฎ้ธๆŠž

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๅ†…ใฎ็‰นๅฎšใฎใ‚ทใƒชใƒผใ‚บ๏ผˆ1ๅˆ—๏ผ‰ใ‚’้ธๆŠžใ™ใ‚‹ๅ ดๅˆใฏใ€.get_column()ใƒกใ‚ฝใƒƒใƒ‰ใซๅˆ—ๅใ‚’ๆธกใ—ใพใ™๏ผˆpandasใฎใ‚ˆใ†ใซdf[col]ใจๆ›ธใใ“ใจใ‚‚ๅฏ่ƒฝใงใ™๏ผ‰ใ€‚

df.get_column("Integer")
# shape: (4,)
# Series: 'Integer' [i64]
# [
#     1
#     2
#     3
#     4
# ]

.get_columns()ใ‚’ไฝฟใฃใŸใ‚ทใƒชใƒผใ‚บใฎ้ธๆŠž

.get_columns()ใฏใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎๅ…จใฆใฎๅˆ—ใ‚’ๅˆ†่งฃใ—ใ€ใ‚ทใƒชใƒผใ‚บใฎใƒชใ‚นใƒˆใซๅค‰ๆ›ใ—ใพใ™ใ€‚ใ“ใ‚Œใ‚’็”จใ„ใ‚‹ใจใ€ใ€Œๅทฆใ‹ใ‚‰X็•ช็›ฎใฎๅˆ—ใ€๏ผˆXใฏ0ใฏใ˜ใพใ‚Š๏ผ‰ใฎใ‚ทใƒชใƒผใ‚บใ‚’ๅ–ๅพ—ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

type(df.get_columns())
# list<class 'list'>

df.get_columns()[1]
# shape: (4,)
# Series: 'Float' [f64]
# [
#     1.0
#     2.0
#     3.0
#     4.0
# ]

ใชใŠใ€.get_column_index()ใƒกใ‚ฝใƒƒใƒ‰ใซๅˆ—ๅใ‚’ๆธกใ™ใจใ€ใใฎๅˆ—ใŒๅทฆใ‹ใ‚‰ไฝ•็•ช็›ฎใซใ‚ใ‚‹ใ‹ใ‚’ๆ•™ใˆใฆใใ‚Œใพใ™ใ€‚

df.get_column_index("Float")
# 1

.select()ใ‚’ไฝฟใฃใŸๅˆ—้ธๆŠž

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๅ†…ใฎ๏ผˆ1ใคไปฅไธŠใฎ๏ผ‰็‰นๅฎšใฎๅˆ—ใ‚’้ธๆŠžใ™ใ‚‹ๅ ดๅˆใฏใ€.select()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’็”จใ„ใพใ™ใ€‚

.get_column()ใƒกใ‚ฝใƒƒใƒ‰ใจ้•ใ„ใ€ๅˆ—ๅใ‚’ไธ€ใคๆธกใ—ใŸๅ ดๅˆใฎๆˆปใ‚Šๅ€คใฏใ€๏ผˆใ‚ทใƒชใƒผใ‚บใงใฏใชใ๏ผ‰1ๅˆ—ใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใงใ™ใ€‚

df.select("Integer")
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”‚
# โ”‚ ---     โ”‚
# โ”‚ i64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”‚
# โ”‚ 2       โ”‚
# โ”‚ 3       โ”‚
# โ”‚ 4       โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ๅใ‚’่ค‡ๆ•ฐๆธกใ—ใŸๅ ดๅˆใ€ใพใŸใฏๅˆ—ๅใฎใƒชใ‚นใƒˆใ‚’ๆธกใ—ใŸๅ ดๅˆใ€2ๅˆ—ไปฅไธŠใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซใชใ‚Šใพใ™ใ€‚

df.select("Integer", "Float") 
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”‚
# โ”‚ ---     โ”† ---   โ”‚
# โ”‚ i64     โ”† f64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”‚
# โ”‚ 2       โ”† 2.0   โ”‚
# โ”‚ 3       โ”† 3.0   โ”‚
# โ”‚ 4       โ”† 4.0   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ค‡ๆ•ฐใฎใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ๆธกใ™ใ“ใจใ‚‚ใงใใพใ™ใ€‚ใ‚นใ‚ซใƒฉใƒผๅ€คใŒๆˆปใ‚Šๅ€คใซใชใ‚‹ใ‚ˆใ†ใชใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฏใƒ–ใƒญใƒผใƒ‰ใ‚ญใƒฃใ‚นใƒˆใ•ใ‚Œใพใ™ใ€‚

df.select(pl.col("Integer"), pl.col("Float"))
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”‚
# โ”‚ ---     โ”† ---   โ”‚
# โ”‚ i64     โ”† f64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”‚
# โ”‚ 2       โ”† 2.0   โ”‚
# โ”‚ 3       โ”† 3.0   โ”‚
# โ”‚ 4       โ”† 4.0   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.select(pl.col("Integer")*2, pl.col("Float").sum())
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”‚
# โ”‚ ---     โ”† ---   โ”‚
# โ”‚ i64     โ”† f64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2       โ”† 10.0  โ”‚
# โ”‚ 4       โ”† 10.0  โ”‚
# โ”‚ 6       โ”† 10.0  โ”‚
# โ”‚ 8       โ”† 10.0  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ใฎ่ฟฝๅŠ 

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅˆ—ใ‚’่ฟฝๅŠ ใ™ใ‚‹ๅ ดๅˆใฏ.with_columns()ใ‚’ไฝฟใ„ใพใ™๏ผˆpandasใฎ.assign()ใซไผผใฆใ„ใพใ™๏ผ‰ใ€‚

ๅŸบๆœฌ็š„ใซใ€ๆ—ขๅญ˜ใฎๅˆ—ใซ็‰นๅฎšใฎๆ“ไฝœใ‚’่กŒใ†ใ“ใจใงๆ–ฐใ—ใ„ๅˆ—ใ‚’ใคใใ‚‹ๅ ดๅˆใฏใ€ใ‚ทใƒชใƒผใ‚บๆ“ไฝœใงใฏใชใใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ไฝฟใ†ใ“ใจใ‚’ๆŽจๅฅจใ—ใพใ™ใ€‚ไพ‹ใˆใฐใ€ไปฅไธ‹ใฎไบŒใคใฎๆ“ไฝœใฏ็ตๆžœใฏๅŒใ˜ใงใ™ใŒใ€ๅพŒ่€…ใฎใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’็”จใ„ใŸๆ“ไฝœใฎๆ–นใŒใƒกใƒขใƒชใƒป่จˆ็ฎ—้‡ใฎ่ฆณ็‚นใ‹ใ‚‰ใฏๅŠน็އใŒ่‰ฏใ„ใงใ™๏ผˆใชใŠใ€ไปฅไธ‹ใฎไพ‹ใง็”จใ„ใฆใ„ใ‚‹.alias()ใฏ้ธๆŠžใ•ใ‚ŒใŸๅˆ—ใฎๅˆ—ๅใฎๅค‰ๆ›ดใ‚’่กŒใ†ใƒกใ‚ฝใƒƒใƒ‰ใงใ™๏ผ‰ใ€‚

# ๆ–ฐใ—ใ„ใ‚ทใƒชใƒผใ‚บใฎไฝœๆˆใ‚’ไผดใ†ๆ“ไฝœ
new_seires = (df.get_column("Integer") * 2).alias("Integer2")
df.with_columns(new_seires)
# shape: (4, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”† Integer2 โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”† ---      โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”† i64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 2        โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 4        โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 6        โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 8        โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

# ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใซใ‚ˆใ‚‹ๆ“ไฝœ
new_column = (pl.col("Integer") * 2).alias("Integer2")
df.with_columns(new_column)
# shape: (4, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”† Integer2 โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”† ---      โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”† i64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 2        โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 4        โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 6        โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 8        โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ—ขๅญ˜ใฎๅˆ—ๅใจๅŒๅใฎๅˆ—ใ‚’่ฟฝๅŠ ใ™ใ‚‹ใจใ€่ฟฝๅŠ ใงใฏใชใๆ›ดๆ–ฐใซใชใ‚Šใพใ™ใ€‚

df.with_columns(pl.col("Integer") * 100)
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 100     โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 200     โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 300     โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 400     โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.with_columns()ใซใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’่ค‡ๆ•ฐๆธกใ™ใจใ€ไธ€ๅบฆใซ่ค‡ๆ•ฐใฎๅˆ—ใ‚’่ฟฝๅŠ ใงใใพใ™ใ€‚

df.with_columns(
    pl.sum("Integer").alias("Integer2"), (pl.col("Float") * 100).alias("Arange")
)
# shape: (4, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”† Integer2 โ”† Arange โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”† ---      โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”† i64      โ”† f64    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 10       โ”† 100.0  โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 10       โ”† 200.0  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 10       โ”† 300.0  โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 10       โ”† 400.0  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pandasใฎ.assign()ใจๅŒๆง˜ใซใ€ๆ–ฐใ—ใ„ๅˆ—ๅใ‚’ใ‚ญใƒผใƒฏใƒผใƒ‰ๅผ•ๆ•ฐใจใ—ใฆๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚

df.with_columns(
    Integer2=pl.sum("Integer"),
    Arange=pl.col("Float") * 100
)
# shape: (4, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”† Integer2 โ”† Arange โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”† ---      โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”† i64      โ”† f64    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 10       โ”† 100.0  โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 10       โ”† 200.0  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”† 10       โ”† 300.0  โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”† 10       โ”† 400.0  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.with_row_index()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ€ๅทฆ็ซฏใซ0ๅง‹ใพใ‚Šใฎๆ•ดๆ•ฐๅˆ—ใ€Œindexใ€๏ผˆๅˆ—ๅใฏname=ๅผ•ๆ•ฐใงๆŒ‡ๅฎšๅฏ่ƒฝ๏ผ‰ใ‚’่ฟฝๅŠ ใ—ใพใ™ใ€‚ๆ„Ÿ่ฆš็š„ใซpandasใฎ.reset_index()ใซไผผใฆใ„ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚

df.with_row_count()
# shape: (4, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ index โ”† Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---   โ”† ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ u32   โ”† i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 0     โ”† 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 1     โ”† 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 2     โ”† 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 3     โ”† 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠ.select()ใงใ‚‚ๅˆ—ใฎ่ฟฝๅŠ ใฏๅฏ่ƒฝใงใ™ใ€‚ๆฌกใฎไพ‹ใงไฝฟ็”จใ•ใ‚Œใฆใ„ใ‚‹pl.arange()ใฏใ€np.arange()ใ‚„pd.RangeIndex()ใซ็›ธๅฝ“ใ™ใ‚‹ใ€็ญ‰ๅทฎๆ•ฐๅˆ—ใ‚’ไฝœๆˆใ™ใ‚‹ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใงใ™ใ€‚

df.select(pl.arange(0, df.height).alias("index"), pl.all())

# shape: (4, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ index โ”† Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---   โ”† ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ u32   โ”† i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 0     โ”† 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 1     โ”† 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 2     โ”† 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 3     โ”† 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅŸบ็คŽ็š„ใชๆ“ไฝœใจๆผ”็ฎ—

ๅ››ๅ‰‡ๆผ”็ฎ—

ใ‚นใ‚ซใƒฉใƒผๅ€คใจใฎๅ››ๅ‰‡ๆผ”็ฎ—ใฏNumPyใ‚„pandasใจๅŒๆง˜ใซๅ‹•ไฝœใ—ใพใ™ใ€‚

rng = np.random.default_rng(0)
df_num = pl.DataFrame(rng.integers(0, 10, (6, 3)), schema="ABC")

df_num
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 8   โ”† 6   โ”† 5   โ”‚
# โ”‚ 2   โ”† 3   โ”† 0   โ”‚
# โ”‚ 0   โ”† 0   โ”† 1   โ”‚
# โ”‚ 8   โ”† 6   โ”† 9   โ”‚
# โ”‚ 5   โ”† 6   โ”† 9   โ”‚
# โ”‚ 7   โ”† 6   โ”† 5   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num + 2
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 10  โ”† 8   โ”† 7   โ”‚
# โ”‚ 4   โ”† 5   โ”† 2   โ”‚
# โ”‚ 2   โ”† 2   โ”† 3   โ”‚
# โ”‚ 10  โ”† 8   โ”† 11  โ”‚
# โ”‚ 7   โ”† 8   โ”† 11  โ”‚
# โ”‚ 9   โ”† 8   โ”† 7   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num * 2
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 16  โ”† 12  โ”† 10  โ”‚
# โ”‚ 4   โ”† 6   โ”† 0   โ”‚
# โ”‚ 0   โ”† 0   โ”† 2   โ”‚
# โ”‚ 16  โ”† 12  โ”† 18  โ”‚
# โ”‚ 10  โ”† 12  โ”† 18  โ”‚
# โ”‚ 14  โ”† 12  โ”† 10  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ในใไน—**ใฏใ‚ทใƒชใƒผใ‚บใซๅฏพใ—ใฆใฎใฟๅ‹•ไฝœใ—ใพใ™ใ€‚ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎใ™ในใฆใฎ่ฆ็ด ใซในใไน—่จˆ็ฎ—ใ‚’ใ—ใŸใ„ๅ ดๅˆใฏ.select()ใƒกใ‚ฝใƒƒใƒ‰ใจใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ไฝฟใ„ใพใ™ใ€‚

df_num.get_column("A") ** 2
# shape: (6,)
# Series: 'A' [i64]
# [
#     64
#     4
#     0
#     64
#     25
#     49
# ]

df_num.select(pl.all().pow(2))
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 64  โ”† 36  โ”† 25  โ”‚
# โ”‚ 4   โ”† 9   โ”† 0   โ”‚
# โ”‚ 0   โ”† 0   โ”† 1   โ”‚
# โ”‚ 64  โ”† 36  โ”† 81  โ”‚
# โ”‚ 25  โ”† 36  โ”† 81  โ”‚
# โ”‚ 49  โ”† 36  โ”† 25  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ๅŒใ˜้•ทใ•๏ผˆ่กŒๆ•ฐ๏ผ‰ใงใ‚ใ‚Œใฐใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใจใ‚ทใƒชใƒผใ‚บใ€ใ‚ทใƒชใƒผใ‚บๅŒๅฃซใฎ่จˆ็ฎ—ใŒๅฏ่ƒฝใงใ™ใ€‚

df_num + df_num.get_column("B")
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 14  โ”† 12  โ”† 11  โ”‚
# โ”‚ 5   โ”† 6   โ”† 3   โ”‚
# โ”‚ 0   โ”† 0   โ”† 1   โ”‚
# โ”‚ 14  โ”† 12  โ”† 15  โ”‚
# โ”‚ 11  โ”† 12  โ”† 15  โ”‚
# โ”‚ 13  โ”† 12  โ”† 11  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num.get_column("A") + df_num.get_column("B")
# shape: (6,)
# Series: 'A' [i64]
# [
#     14
#     5
#     0
#     14
#     11
#     13
# ]

ๆฏ”่ผƒๆผ”็ฎ—

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅฏพใ—ใฆ็›ดๆŽฅๆฏ”่ผƒๆผ”็ฎ—ใฏใงใใพใ›ใ‚“๏ผˆ.select()ใƒกใ‚ฝใƒƒใƒ‰ใจใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ไฝฟใ„ใพใ™๏ผ‰ใ€‚ใ‚ทใƒชใƒผใ‚บใฏ็›ดๆŽฅๆ•ฐๅ€คใจๆฏ”่ผƒๅฏ่ƒฝใงใ™ใ€‚

df_num.get_column("A") == 0
# shape: (6,)
# Series: 'A' [bool]
# [
#     false
#     false
#     true
#     false
#     false
#     false
# ]

df_num.get_column("A") > 2
# shape: (6,)
# Series: 'A' [bool]
# [
#     true
#     false
#     false
#     true
#     true
#     true
# ]

ๅŒใ˜้•ทใ•ใฎใ‚ทใƒชใƒผใ‚บๅŒๅฃซใ‚’ๆฏ”่ผƒใงใใพใ™ใ€‚

df_num.get_column("A") > df_num.get_column("B")
# shape: (6,)
# Series: '' [bool]
# [
#     true
#     false
#     false
#     true
#     false
#     true
# ]

็ญ‰ไพกๆฏ”่ผƒ==ใฏๆ•ฐๅ€คไปฅๅค–ใงใ‚‚ๅฏ่ƒฝใงใ™ใ€‚

pl.Series(["foo", "bar", "baz"]) == pl.Series(["foo", "bar", "qux"])
# shape: (3,)
# Series: '' [bool]
# [
#     true
#     true
#     false
# ]

้›†่จˆ้–ขๆ•ฐ

.sum()ใ‚„.mean()็ญ‰ใฎ้–ขๆ•ฐใฏๅˆ—๏ผˆๅž‚็›ด๏ผ‰ๆ–นๅ‘ใซ้ฉ็”จใงใใพใ™ใ€‚

df_num.sum()
# shape: (1, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 30  โ”† 27  โ”† 29  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_num.mean()
# shape: (1, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C        โ”‚
# โ”‚ --- โ”† --- โ”† ---      โ”‚
# โ”‚ f64 โ”† f64 โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 5.0 โ”† 4.5 โ”† 4.833333 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_num.quantile(0.5)
# shape: (1, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”‚
# โ”‚ f64 โ”† f64 โ”† f64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 7.0 โ”† 6.0 โ”† 5.0 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€่กŒ๏ผˆๆฐดๅนณ๏ผ‰ๆ–นๅ‘ใฎ้›†็ด„ใฏ.sum_horizontal()็ญ‰ใฎโ€œ_horizontalโ€ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ†ใ‹ใ€ใ‚ˆใ‚ŠๆŸ”่ปŸใซ่ค‡้›‘ใช่จˆ็ฎ—ใ‚’่กŒใ†ๅ ดๅˆใฏ.fold()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚ๅพŒ่€…ใฏใŠใŠใ‚€ใญPythonๆจ™ๆบ–ใฎfunctools.reduce()ใซๅฏพๅฟœใ—ใพใ™ใ€‚

df_num.fold(lambda a, b: a+b)
# shape: (6,)
# Series: 'A' [i64]
# [
#     19
#     5
#     1
#     23
#     20
#     18
# ]

# ไปฅไธ‹ใซ็ญ‰ใ—ใ„
from functools import reduce
reduce(lambda a, b: a+b, df_num)

ๅ‡บ็พๅ›žๆ•ฐใ‚’้›†่จˆใ™ใ‚‹.value_counts()

ใ‚ทใƒชใƒผใ‚บใฎ.value_counts()ใฏpandasใจๅŒๆง˜ใซๆ‰ฑใ†ใ“ใจใŒใงใใพใ™ใ€‚ใชใŠใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซใฏ.value_counts()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ‚ใ‚Šใพใ›ใ‚“๏ผˆๅŒ็ญ‰ใฎ็ตๆžœใฏ.groupby(pl.all()).len()ใงๅพ—ใ‚‹ใ“ใจใŒใงใใพใ™๏ผ‰ใ€‚

df_num["A"].value_counts()
# shape: (5, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† count โ”‚
# โ”‚ --- โ”† ---   โ”‚
# โ”‚ i64 โ”† u32   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2   โ”† 1     โ”‚
# โ”‚ 8   โ”† 2     โ”‚
# โ”‚ 0   โ”† 1     โ”‚
# โ”‚ 5   โ”† 1     โ”‚
# โ”‚ 7   โ”† 1     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็ตๆžœใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฏใฉใฎๅˆ—ใซใ‚ˆใฃใฆใ‚‚ใ‚ฝใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚sort=Trueใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€ๅ‡บ็พๅ›žๆ•ฐๅคšใ„้ †ใงใ‚ฝใƒผใƒˆใ•ใ‚Œใพใ™๏ผˆๅ€คใฎๅˆ—ใงใ‚ฝใƒผใƒˆใ€ใพใŸใฏๅ‡บ็พๅ›žๆ•ฐๅฐ‘ใชใ„้ †ใงใ‚ฝใƒผใƒˆใ—ใŸใ„ๅ ดๅˆใฏ.sort()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’็ถšใ‘ใพใ—ใ‚‡ใ†๏ผ‰ใ€‚

df_num["A"].value_counts(sort=True)
# shape: (5, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† count โ”‚
# โ”‚ --- โ”† ---   โ”‚
# โ”‚ i64 โ”† u32   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 8   โ”† 2     โ”‚
# โ”‚ 2   โ”† 1     โ”‚
# โ”‚ 0   โ”† 1     โ”‚
# โ”‚ 5   โ”† 1     โ”‚
# โ”‚ 7   โ”† 1     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใซๅฏพใ™ใ‚‹.value_counts()ใฏใ€ๆง‹้€ ๅŒ–้…ๅˆ—ใ‚’่ฟ”ใ—ใพใ™ใ€‚

df_num.select(pl.col("A").value_counts())
# shape: (5, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A         โ”‚
# โ”‚ ---       โ”‚
# โ”‚ struct[2] โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ {0,1}     โ”‚
# โ”‚ {8,2}     โ”‚
# โ”‚ {5,1}     โ”‚
# โ”‚ {7,1}     โ”‚
# โ”‚ {2,1}     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ๆ“ไฝœ๏ผšใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฎไธปใชไฝฟใ„ๆ–น

ใ‚ทใƒชใƒผใ‚บ๏ผˆๅ ดๅˆใซใ‚ˆใฃใฆใฏใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๏ผ‰ใซใชใ‚“ใ‚‰ใ‹ใฎๆ“ไฝœใ‚’ใ™ใ‚‹ๅ ดๅˆใฏใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ไธŽใˆใŸใปใ†ใŒไพฟๅˆฉใงใ™ใ€‚

ๅˆ—้ธๆŠžใƒปๆŒ‡ๅฎš๏ผšpl.col()

ๅˆ—้ธๆŠžใฏpl.col()ใซๅˆ—ๅใ‚’ๆธกใ™ใ“ใจใง่กŒใ„ใพใ™ใ€‚

df = pl.DataFrame(
    {
        "Integer": [1, 2, 3, 4],
        "Float": np.array([1, 2, 3, 4], dtype=float),
        "Datetime": [datetime.datetime(2022, 4, 1)] * 4,
        "String": ["test", "train", "test", "train"],
    }
)

df.select(pl.col("String"))
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ String โ”‚
# โ”‚ ---    โ”‚
# โ”‚ str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ test   โ”‚
# โ”‚ train  โ”‚
# โ”‚ test   โ”‚
# โ”‚ train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ๅใ‚’่ค‡ๆ•ฐๆธกใ™ใจใ€่ค‡ๆ•ฐๅˆ—ใ‚’ใพใจใ‚ใฆ้ธๆŠžใงใใพใ™ใ€‚

df.select(pl.col("String", "Integer"))
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ String โ”† Integer โ”‚
# โ”‚ ---    โ”† ---     โ”‚
# โ”‚ str    โ”† i64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ test   โ”† 1       โ”‚
# โ”‚ train  โ”† 2       โ”‚
# โ”‚ test   โ”† 3       โ”‚
# โ”‚ train  โ”† 4       โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ๅใ‚’"^ ... $"ใงๅ›ฒใ‚€ใจๆญฃ่ฆ่กจ็พใŒไฝฟใˆใพใ™ใ€‚

df.select(pl.col(r"^[DS].+$"))
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Datetime            โ”† String โ”‚
# โ”‚ ---                 โ”† ---    โ”‚
# โ”‚ datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็‰นๅฎšใฎใƒ‡ใƒผใ‚ฟๅž‹ใฎๅˆ—ใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚

df.select(pl.col(pl.Int64))
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”‚
# โ”‚ ---     โ”‚
# โ”‚ i64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”‚
# โ”‚ 2       โ”‚
# โ”‚ 3       โ”‚
# โ”‚ 4       โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.all()ใ€ใพใŸใฏpl.col("*")ใงใ™ในใฆใฎๅˆ—ใ‚’้ธๆŠžใ—ใพใ™ใ€‚

df.select(pl.all())
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---     โ”† ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ i64     โ”† f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1       โ”† 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2       โ”† 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 3       โ”† 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 4       โ”† 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.select(pl.col("*"))
# ๏ผˆๅŒใ˜็ตๆžœ๏ผ‰

pl.exclude()ใฏๆŒ‡ๅฎšใ—ใŸๅˆ—ไปฅๅค–ใฎใ™ในใฆใ‚’้ธๆŠžใ—ใพใ™ใ€‚pl.col()ใจๅŒๆง˜ใซใƒชใ‚นใƒˆใ‚„ๆญฃ่ฆ่กจ็พใ‚‚ใคใ‹ใ†ใ“ใจใŒใงใใพใ™ใ€‚

df.select(pl.exclude("Integer"))
# shape: (4, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Float โ”† Datetime            โ”† String โ”‚
# โ”‚ ---   โ”† ---                 โ”† ---    โ”‚
# โ”‚ f64   โ”† datetime[ฮผs]        โ”† str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 2.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ”‚ 3.0   โ”† 2022-04-01 00:00:00 โ”† test   โ”‚
# โ”‚ 4.0   โ”† 2022-04-01 00:00:00 โ”† train  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใพใŸใ€pl.selectorsใ‚’ไฝฟใ†ใจใ•ใ‚‰ใซ่ค‡้›‘ใชๆกไปถใ‚’็›ดๆ„Ÿ็š„ใซๆŒ‡ๅฎšใงใใพใ™ใ€‚

ๅˆ—ๅใฎๅค‰ๆ›ด

ๅˆ—ๅใ‚’ไปปๆ„ใฎๆ–‡ๅญ—ๅˆ—ใซๅค‰ๆ›ดใ™ใ‚‹ๅ ดๅˆใฏ.alias()ใ‚’ไฝฟใ„ใพใ™ใ€‚polarsใงใฏๅˆ—ๅใฎ้‡่ค‡ใ‚’่จฑใ•ใชใ„ใฎใงใ‚ˆใไฝฟใ„ใพใ™ใ€‚.alias()ใฏpl.col()ใงไบŒๅˆ—ไปฅไธŠ้ธๆŠžใ—ใฆใ„ใ‚‹ๅ ดๅˆใฏไฝฟ็”จใงใใพใ›ใ‚“ใ€‚

df.select(pl.col("Integer").alias("ABC"), pl.col("Integer").alias("DEF"))
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ ABC โ”† DEF โ”‚
# โ”‚ --- โ”† --- โ”‚
# โ”‚ i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 1   โ”† 1   โ”‚
# โ”‚ 2   โ”† 2   โ”‚
# โ”‚ 3   โ”† 3   โ”‚
# โ”‚ 4   โ”† 4   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

.name.prefix()ใจ.name.suffix()ใงๅˆ—ๅใฎๅ‰ๅพŒใซไปปๆ„ใฎๆ–‡ๅญ—ๅˆ—ใ‚’ใคใชใ’ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

df.select(
    pl.col("Integer", "Float").name.prefix("Col_"),
    pl.col("String").name.suffix("_col"),
)
# shape: (4, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Col_Integer โ”† Col_Float โ”† String_col โ”‚
# โ”‚ ---         โ”† ---       โ”† ---        โ”‚
# โ”‚ i64         โ”† f64       โ”† str        โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1           โ”† 1.0       โ”† test       โ”‚
# โ”‚ 2           โ”† 2.0       โ”† train      โ”‚
# โ”‚ 3           โ”† 3.0       โ”† test       โ”‚
# โ”‚ 4           โ”† 4.0       โ”† train      โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ฝใƒผใƒˆใƒปไธฆใณๆ›ฟใˆ

ใ‚ฝใƒผใƒˆใฏ.sort()ใ‚’ไฝฟใ„ใพใ™ใ€‚

df_unsort = pl.DataFrame(
    {
        "col1": ["A", "A", "B", None, "D", "C"],
        "col2": [2, 1, 9, 8, 7, 4],
        "col3": [0, 1, 9, 4, 2, 3],
        "col4": ["a", "B", "c", "D", "e", "F"],
    }
)
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col1 โ”† col2 โ”† col3 โ”† col4 โ”‚
# โ”‚ ---  โ”† ---  โ”† ---  โ”† ---  โ”‚
# โ”‚ str  โ”† i64  โ”† i64  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ A    โ”† 2    โ”† 0    โ”† a    โ”‚
# โ”‚ A    โ”† 1    โ”† 1    โ”† B    โ”‚
# โ”‚ B    โ”† 9    โ”† 9    โ”† c    โ”‚
# โ”‚ null โ”† 8    โ”† 4    โ”† D    โ”‚
# โ”‚ D    โ”† 7    โ”† 2    โ”† e    โ”‚
# โ”‚ C    โ”† 4    โ”† 3    โ”† F    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_unsort.select(pl.col("col1").sort())
# shape: (6, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col1 โ”‚
# โ”‚ ---  โ”‚
# โ”‚ str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ null โ”‚
# โ”‚ A    โ”‚
# โ”‚ A    โ”‚
# โ”‚ B    โ”‚
# โ”‚ C    โ”‚
# โ”‚ D    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.col()็ญ‰ใง่ค‡ๆ•ฐๅˆ—้ธๆŠžใ—ใฆใ„ใŸๅ ดๅˆใงใ‚‚ใ€ใ‚ฝใƒผใƒˆใฏ ๅˆ—ใ”ใจใซ็‹ฌ็ซ‹ใ—ใฆ ่กŒใ‚ใ‚Œใ‚‹ใฎใงๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚

df_unsort.select(pl.col("col1", "col2").sort())
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col1 โ”† col2 โ”‚
# โ”‚ ---  โ”† ---  โ”‚
# โ”‚ str  โ”† i64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ null โ”† 1    โ”‚
# โ”‚ A    โ”† 2    โ”‚
# โ”‚ A    โ”† 4    โ”‚
# โ”‚ B    โ”† 7    โ”‚
# โ”‚ C    โ”† 8    โ”‚
# โ”‚ D    โ”† 9    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็‰นๅฎšใฎๅˆ—ใซๆฒฟใฃใฆ่ค‡ๆ•ฐๅˆ—ใ‚’ใ‚ฝใƒผใƒˆใ™ใ‚‹๏ผˆๅ„่กŒๅ†…ใ‚’็ถญๆŒใ—ใฆใ‚ฝใƒผใƒˆใ™ใ‚‹๏ผ‰ใซใฏ.sort_by()ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ใ‚ญใƒผใ‚’่ค‡ๆ•ฐๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚

df_unsort.select(pl.col("col1", "col2").sort_by("col1"))
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col1 โ”† col2 โ”‚
# โ”‚ ---  โ”† ---  โ”‚
# โ”‚ str  โ”† i64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ null โ”† 8    โ”‚
# โ”‚ A    โ”† 2    โ”‚
# โ”‚ A    โ”† 1    โ”‚
# โ”‚ B    โ”† 9    โ”‚
# โ”‚ C    โ”† 4    โ”‚
# โ”‚ D    โ”† 7    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_unsort.select(pl.col("col3").sort_by("col1", "col2"))
# shape: (6, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col3 โ”‚
# โ”‚ ---  โ”‚
# โ”‚ i64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 4    โ”‚
# โ”‚ 1    โ”‚
# โ”‚ 0    โ”‚
# โ”‚ 9    โ”‚
# โ”‚ 3    โ”‚
# โ”‚ 2    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.sort()ใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏๆ˜‡้ †ใ‚ฝใƒผใƒˆใงใ™ใ€‚descending=Trueใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจ้™้ †ใซใชใ‚Šใพใ™ใ€‚ๆ˜‡้ †ใƒป้™้ †ใซใ‹ใ‹ใ‚ใ‚‰ใš ๆฌ ๆๅ€คใฏๅ…ˆ้ ญ ใซไธฆในใ‚‰ใ‚Œใพใ™ใ€‚ๆฌ ๆๅ€คใ‚’ๆœ€ๅพŒใซไธฆในใ‚‹ใซใฏnulls_last=Trueใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

df_unsort.select(
    pl.col("col1").sort().alias("default"),
    pl.col("col1").sort(descending=True).alias("desc"),
    pl.col("col1").sort(nulls_last=True).alias("nlast"),
    pl.col("col1").sort(descending=True, nulls_last=True).alias("desc_nlast"),
)
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ default โ”† desc โ”† nlast โ”† desc_nlast โ”‚
# โ”‚ ---     โ”† ---  โ”† ---   โ”† ---        โ”‚
# โ”‚ str     โ”† str  โ”† str   โ”† str        โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ null    โ”† null โ”† A     โ”† D          โ”‚
# โ”‚ A       โ”† D    โ”† A     โ”† C          โ”‚
# โ”‚ A       โ”† C    โ”† B     โ”† B          โ”‚
# โ”‚ B       โ”† B    โ”† C     โ”† A          โ”‚
# โ”‚ C       โ”† A    โ”† D     โ”† A          โ”‚
# โ”‚ D       โ”† A    โ”† null  โ”† null       โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.reverse()ใฏใ€ๅˆ—ใ‚’ไธŠไธ‹้€†ใซไธฆใณๆ›ฟใˆใพใ™๏ผˆใคใพใ‚Šใ‚นใƒฉใ‚คใ‚น่จ˜ๆณ•ใงใ„ใ†[::-1]๏ผ‰ใ€‚

df_unsort.select(pl.col("col4").reverse())
# shape: (6, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ col4 โ”‚
# โ”‚ ---  โ”‚
# โ”‚ str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ F    โ”‚
# โ”‚ e    โ”‚
# โ”‚ D    โ”‚
# โ”‚ c    โ”‚
# โ”‚ B    โ”‚
# โ”‚ a    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

้›†่จˆ่จˆ็ฎ—

ๅˆ—้ธๆŠžๅพŒใ€.sum()ใง็ทๅ’Œใ‚’่จˆ็ฎ—ใ—ใพใ™ใ€‚

df.select(pl.col("Integer").sum())
# shape: (1, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”‚
# โ”‚ ---     โ”‚
# โ”‚ i64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 10      โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.col(ๅˆ—ๅ).sum()ใฏใ€็œ็•ฅใ—ใฆpl.sum(ๅˆ—ๅ)ใจๆ›ธใใ“ใจใ‚‚ใงใใพใ™ใ€‚

df.select(pl.sum("Integer"))
# shape: (1, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”‚
# โ”‚ ---     โ”‚
# โ”‚ i64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 10      โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.sum()ไปฅๅค–ใซใ‚‚ๆง˜ใ€…ใช้–ขๆ•ฐใŒใ‚ใ‚Šใพใ™ใ€‚

df.select(
    pl.count("Integer").alias("count"),
    pl.n_unique("Integer").alias("n_unique"),
    pl.max("Integer").alias("max"),
    pl.min("Integer").alias("min"),
    pl.mean("Integer").alias("mean"),
    pl.median("Integer").alias("median"),
    pl.quantile("Integer", 0.5).alias("50%tile"),
    pl.std("Integer").alias("std"),
    pl.var("Integer").alias("var"),
)
# shape: (1, 9)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ count โ”† n_unique โ”† max โ”† min โ”† ... โ”† median โ”† 50%tile โ”† std      โ”† var      โ”‚
# โ”‚ ---   โ”† ---      โ”† --- โ”† --- โ”†     โ”† ---    โ”† ---     โ”† ---      โ”† ---      โ”‚
# โ”‚ u32   โ”† u32      โ”† i64 โ”† i64 โ”†     โ”† f64    โ”† f64     โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 4     โ”† 4        โ”† 4   โ”† 1   โ”† ... โ”† 2.5    โ”† 3.0     โ”† 1.290994 โ”† 1.666667 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.over()ใ‚’้ฉ็”จใ™ใ‚‹ใจใ‚ฐใƒซใƒผใƒ—ใ”ใจใฎ่จˆ็ฎ—ๅ€คใ‚’่ฟ”ใ—ใพใ™๏ผˆpandasใฎgroupby.transform()๏ผ‰ใ€‚

df.select(pl.col("Integer", "Float").sum().over("String"))
# shape: (4, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Integer โ”† Float โ”‚
# โ”‚ ---     โ”† ---   โ”‚
# โ”‚ i64     โ”† f64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 4       โ”† 4.0   โ”‚
# โ”‚ 6       โ”† 6.0   โ”‚
# โ”‚ 4       โ”† 4.0   โ”‚
# โ”‚ 6       โ”† 6.0   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆกไปถๅˆ†ๅฒ๏ผšwhen()

ๆกไปถๅˆ†ๅฒ๏ผˆnp.where()ใซ็›ธๅฝ“ใ™ใ‚‹ใ‚‚ใฎ๏ผ‰ใฏwhen(ๆกไปถๆ–‡).then(Trueใฎๅ ดๅˆ).otherwise(Flaseใฎๅ ดๅˆ)ใจใ„ใ†็‰นๆฎŠใชใƒใ‚งใƒผใƒณใƒกใ‚ฝใƒƒใƒ‰ใซใ‚ˆใฃใฆ่กŒใ„ใพใ™ใ€‚

df.select(
    pl.when(pl.col("Integer") > 2).then(pl.lit("big")).otherwise(pl.lit("small"))
)
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ literal โ”‚
# โ”‚ ---     โ”‚
# โ”‚ str     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ small   โ”‚
# โ”‚ small   โ”‚
# โ”‚ big     โ”‚
# โ”‚ big     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.select(
    pl.when(pl.col("Integer") > 2)
    .then(pl.col("String").str.to_uppercase())
    .otherwise(pl.col("String").str.replace_all(r".", "x"))
)
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ String โ”‚
# โ”‚ ---    โ”‚
# โ”‚ str    โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ xxxx   โ”‚
# โ”‚ xxxxx  โ”‚
# โ”‚ TEST   โ”‚
# โ”‚ TRAIN  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ค‡ๆ•ฐใฎๆกไปถใซใ‚ˆใฃใฆ็•ฐใชใ‚‹็ตๆžœใจใ—ใŸใ„ๅ ดๅˆ๏ผˆNumPyใฎnp.select()ใ‚„ใ€ExcelใฎIFS()ใฎใ‚ˆใ†ใซ๏ผ‰ใ€when().then().when().then().....when().then().otherwise()ใจใ—ใพใ™ใ€‚

df.select(
    pl.when(pl.col("Integer") == 1)
    .then(pl.lit("one"))
    .when(pl.col("Integer") == 2)
    .then(pl.lit("two"))
    .when(pl.col("Integer") == 3)
    .then(pl.lit("three"))
    .otherwise(pl.lit("other"))
)
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ literal โ”‚
# โ”‚ ---     โ”‚
# โ”‚ str     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ one     โ”‚
# โ”‚ two     โ”‚
# โ”‚ three   โ”‚
# โ”‚ other   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.coalesce()้–ขๆ•ฐใฏใ€ไธŽใˆใ‚‰ใ‚ŒใŸๅˆ—ใ‚’ไธŠใ‹ใ‚‰่ชญใฟ่พผใ‚“ใงใ€Noneใฎๅ ดๅˆใฏๆฌกใฎๅˆ—ใงไธŠๆ›ธใใ—ใพใ™ใ€‚

new_column = pl.coalesce(
    pl.when(pl.col("Integer") == 1).then(pl.lit("one")).otherwise(None),
    pl.when(pl.col("Integer") == 2).then(pl.lit("two")).otherwise(None),
    pl.when(pl.col("Integer") == 3).then(pl.lit("three")).otherwise(pl.lit("other")),
)
df.select(new_column)
# shape: (4, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ literal โ”‚
# โ”‚ ---     โ”‚
# โ”‚ str     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ one     โ”‚
# โ”‚ two     โ”‚
# โ”‚ three   โ”‚
# โ”‚ other   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€polarsใซใ‚ใ‚‹where()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ€ๅ˜ใชใ‚‹filter()ใฎ็•ฐๅใงใ€ๆกไปถๆ–‡ใ‚’ไธŽใˆใ‚‹ใจ่กŒใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐใ—ใพใ™ใ€‚

df.select(pl.col("Float").where(pl.col("Integer") > 2))
# shape: (2, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Float โ”‚
# โ”‚ ---   โ”‚
# โ”‚ f64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 3.0   โ”‚
# โ”‚ 4.0   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ค‡ๆ•ฐใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎ็ตๅˆใƒปใƒžใƒผใ‚ธ

pl.concat()ใซใ‚ˆใ‚‹็ตๅˆ๏ผˆใ‚นใ‚ฟใƒƒใ‚ฏใƒป้€ฃ็ต๏ผ‰

pl.concat()้–ขๆ•ฐใ‚’ไฝฟใฃใฆใ€่ค‡ๆ•ฐใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’็ตๅˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’np.vstack()ใฎใ‚ˆใ†ใซ็ธฆใซ็ตๅˆใ—ใพใ™ใ€‚ใ“ใฎๆ“ไฝœใ‚’ใ™ใ‚‹ๅ ดๅˆใฏใ€็ตๅˆๅ…ƒใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๅŒๅฃซใฏๅˆ—ๆ•ฐใจๅˆ—ๅใŒไธ€่‡ดใ—ใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

df1 = pl.DataFrame(
    {"A": ["A0", "A1"], "B": ["B0", "B1"], "C": ["C0", "C1"], "D": ["D0", "D1"]}
)
df2 = pl.DataFrame(
    {"A": ["A2", "A3"], "B": ["B2", "B3"], "C": ["C2", "C3"], "D": ["D2", "D3"]}
)
df3 = pl.DataFrame(
    {"A": ["A4", "A5"], "B": ["B4", "B5"], "C": ["C4", "C5"], "D": ["D4", "D5"]}
)
df1
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”† D   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚
# โ”‚ str โ”† str โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ A0  โ”† B0  โ”† C0  โ”† D0  โ”‚
# โ”‚ A1  โ”† B1  โ”† C1  โ”† D1  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

pl.concat([df1, df2, df3])
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C   โ”† D   โ”‚
# โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚
# โ”‚ str โ”† str โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ A0  โ”† B0  โ”† C0  โ”† D0  โ”‚
# โ”‚ A1  โ”† B1  โ”† C1  โ”† D1  โ”‚
# โ”‚ A2  โ”† B2  โ”† C2  โ”† D2  โ”‚
# โ”‚ A3  โ”† B3  โ”† C3  โ”† D3  โ”‚
# โ”‚ A4  โ”† B4  โ”† C4  โ”† D4  โ”‚
# โ”‚ A5  โ”† B5  โ”† C5  โ”† D5  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ใŒไธ€่‡ดใ—ใฆใ„ใชใ„ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’็ตๅˆใ—ใŸใ„ๅ ดๅˆใฏhow="diagonal"ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ๅˆ—ๅใ‚’ๅŸบๆบ–ใซใ—ใŸๅฎŒๅ…จๅค–้ƒจ็ตๅˆใจใชใ‚Šใ€่ถณใ‚Šใชใ„้ƒจๅˆ†ใฏnullใงๅŸ‹ใ‚ใ‚‰ใ‚Œใพใ™ใ€‚

df1 = pl.DataFrame(
    {"A": ["A0", "A1"], "B": ["B0", "B1"], "C": ["C0", "C1"]}
)
df2 = pl.DataFrame(
    {"A": ["A2", "A3"], "B": ["B2", "B3"], "D": ["D2", "D3"]}
)
df3 = pl.DataFrame(
    {"A": ["A4", "A5"], "B": ["B4", "B5"], "C": ["C4", "C5"], "D": ["D4", "D5"]}
)

pl.concat([df1, df2, df3], how="diagonal")
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C    โ”† D    โ”‚
# โ”‚ --- โ”† --- โ”† ---  โ”† ---  โ”‚
# โ”‚ str โ”† str โ”† str  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ A0  โ”† B0  โ”† C0   โ”† null โ”‚
# โ”‚ A1  โ”† B1  โ”† C1   โ”† null โ”‚
# โ”‚ A2  โ”† B2  โ”† null โ”† D2   โ”‚
# โ”‚ A3  โ”† B3  โ”† null โ”† D3   โ”‚
# โ”‚ A4  โ”† B4  โ”† C4   โ”† D4   โ”‚
# โ”‚ A5  โ”† B5  โ”† C5   โ”† D5   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.concat()้–ขๆ•ฐใงใ€how="horizontal"ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€np.hstack()ใฎใ‚ˆใ†ใซใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’ๆจชใซ็ตๅˆใงใใพใ™ใ€‚ใ“ใฎๆ“ไฝœใ‚’ใ™ใ‚‹ๅ ดๅˆใฏใ€็ตๅˆๅ…ƒใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎๅˆ—ๅใŒๅ…จใฆ็•ฐใชใฃใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚่กŒๆ•ฐใŒ็•ฐใชใ‚‹ๅ ดๅˆใฏใ€ๆœ€ใ‚‚้•ทใ„ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅˆใ‚ใ›ใฆnullใงๅŸ‹ใ‚ใ‚‰ใ‚Œใพใ™ใ€‚

df1 = pl.DataFrame({"A": ["A0", "A1", "A2"], "B": ["B0", "B1", "B2"]})
df2 = pl.DataFrame({"C": ["C0", "C1"], "D": ["D0", "D1"]})

pl.concat([df1, df2], how="horizontal")
# shape: (3, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”† C    โ”† D    โ”‚
# โ”‚ --- โ”† --- โ”† ---  โ”† ---  โ”‚
# โ”‚ str โ”† str โ”† str  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ A0  โ”† B0  โ”† C0   โ”† D0   โ”‚
# โ”‚ A1  โ”† B1  โ”† C1   โ”† D1   โ”‚
# โ”‚ A2  โ”† B2  โ”† null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pl.concat()ใฏใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ๅŒๅฃซใฎ็ตๅˆๅฐ‚็”จใงใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใจใ‚ทใƒชใƒผใ‚บใฎ็ตๅˆใฏใงใใพใ›ใ‚“ใ€‚ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใจใ‚ทใƒชใƒผใ‚บใฎ็ตๅˆใฏDataFrame.with_columns()ใชใฉใ‚’ไฝฟ็”จใ—ใฆใใ ใ•ใ„ใ€‚

DataFrame.join()ใซใ‚ˆใ‚‹็ตๅˆ๏ผˆใƒžใƒผใ‚ธ๏ผ‰

DataFrame.join()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใฃใฆใ€2ใคใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใ‚’็ตๅˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ไฝฟใ„ๆ–นใฏpandasใฎDataFrame.merge()ใจใปใผๅŒใ˜ใงใ™ใ€‚

ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ๏ผˆhow="inner"๏ผ‰ใงใฏๅ†…้ƒจ็ตๅˆ๏ผˆ2ใคใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅ…ฑ้€šใ—ใฆๅญ˜ๅœจใ™ใ‚‹ใ‚ญใƒผใฎใฟใ‚’ไฟๆŒ๏ผ‰ใซใชใ‚Šใพใ™ใ€‚

left = pl.DataFrame(
    {
        "key1": ["K0", "K0", "K1", "K2"],
        "key2": ["K0", "K1", "K0", "K1"],
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"],
    }
)
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”‚
# โ”‚ K0   โ”† K1   โ”† A1  โ”† B1  โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

right = pl.DataFrame(
    {
        "key1": ["K0", "K1", "K1", "K2"],
        "key2": ["K0", "K0", "K0", "K0"],
        "C": ["C0", "C1", "C2", "C3"],
        "D": ["D0", "D1", "D2", "D3"],
    }
)
# shape: (4, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† C   โ”† D   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† C0  โ”† D0  โ”‚
# โ”‚ K1   โ”† K0   โ”† C1  โ”† D1  โ”‚
# โ”‚ K1   โ”† K0   โ”† C2  โ”† D2  โ”‚
# โ”‚ K2   โ”† K0   โ”† C3  โ”† D3  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

left.join(right, on=["key1", "key2"])
# shape: (3, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”† C   โ”† D   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† C0  โ”† D0  โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”† C1  โ”† D1  โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”† C2  โ”† D2  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ๅทฆๅค–้ƒจ็ตๅˆ๏ผˆๅทฆใƒ•ใƒฌใƒผใƒ ใฎใ‚ญใƒผใซๅˆใ‚ใ›ใฆๅณใƒ•ใƒฌใƒผใƒ ใ‚’็ตๅˆ๏ผ‰ใฏhow="left"ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ๅณๅค–้ƒจ็ตๅˆใฏhow="right"ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

left.join(right, on=["key1", "key2"], how="left")
# shape: (5, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”† C    โ”† D    โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”† ---  โ”† ---  โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”† str  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† C0   โ”† D0   โ”‚
# โ”‚ K0   โ”† K1   โ”† A1  โ”† B1  โ”† null โ”† null โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”† C1   โ”† D1   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”† C2   โ”† D2   โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”† null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

left.join(right, on=["key1", "key2"], how="right")
# shape: (4, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”† key1 โ”† key2 โ”† C   โ”† D   โ”‚
# โ”‚ ---  โ”† ---  โ”† ---  โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str  โ”† str  โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ A0   โ”† B0   โ”† K0   โ”† K0   โ”† C0  โ”† D0  โ”‚
# โ”‚ A2   โ”† B2   โ”† K1   โ”† K0   โ”† C1  โ”† D1  โ”‚
# โ”‚ A2   โ”† B2   โ”† K1   โ”† K0   โ”† C2  โ”† D2  โ”‚
# โ”‚ null โ”† null โ”† K2   โ”† K0   โ”† C3  โ”† D3  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ๅฎŒๅ…จๅค–้ƒจ็ตๅˆใฏhow="full"ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใ“ใฎใจใcoalesce=ๅผ•ๆ•ฐใซใ‚ˆใฃใฆ็ตๆžœใŒๅคงใใ้•ใ†ใฎใงๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚

  • coalesce=False๏ผˆใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ๏ผ‰ใฎๅ ดๅˆใ€ๅทฆๅณใƒ•ใƒฌใƒผใƒ ใฎใ‚ญใƒผๅˆ—ใŒ็ถญๆŒใ•ใ‚ŒใŸ็Šถๆ…‹ใง็ตๅˆใ•ใ‚Œใพใ™ใ€‚ๅˆ—ๅใŒ้‡่ค‡ใ™ใ‚‹ๅ ดๅˆใฏsuffix=ๅผ•ๆ•ฐใงๅณใƒ•ใƒฌใƒผใƒ ใฎใ‚ญใƒผๅˆ—ๅใซๆŽฅๅฐพ่พžใ‚’ไป˜ๅŠ ใงใใพใ™๏ผˆใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏ"_right"๏ผ‰ใ€‚
  • coalesce=Trueใฎๅ ดๅˆใ€ๅทฆๅณใƒ•ใƒฌใƒผใƒ ใฎใ‚ญใƒผๅˆ—ใ‚’่žๅˆใ•ใ›ใŸๆ–ฐใ—ใ„ใ‚ญใƒผๅˆ—ใ‚’ไฝœใ‚Šใพใ™ใ€‚
left.join(right, on=["key1", "key2"], how="full")
# shape: (6, 8)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A    โ”† B    โ”† key1_right โ”† key2_right โ”† C    โ”† D    โ”‚
# โ”‚ ---  โ”† ---  โ”† ---  โ”† ---  โ”† ---        โ”† ---        โ”† ---  โ”† ---  โ”‚
# โ”‚ str  โ”† str  โ”† str  โ”† str  โ”† str        โ”† str        โ”† str  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0   โ”† B0   โ”† K0         โ”† K0         โ”† C0   โ”† D0   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2   โ”† B2   โ”† K1         โ”† K0         โ”† C1   โ”† D1   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2   โ”† B2   โ”† K1         โ”† K0         โ”† C2   โ”† D2   โ”‚
# โ”‚ null โ”† null โ”† null โ”† null โ”† K2         โ”† K0         โ”† C3   โ”† D3   โ”‚
# โ”‚ K0   โ”† K1   โ”† A1   โ”† B1   โ”† null       โ”† null       โ”† null โ”† null โ”‚
# โ”‚ K2   โ”† K1   โ”† A3   โ”† B3   โ”† null       โ”† null       โ”† null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

left.join(right, on=["key1", "key2"], how="full", coalesce=True)
# shape: (6, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A    โ”† B    โ”† C    โ”† D    โ”‚
# โ”‚ ---  โ”† ---  โ”† ---  โ”† ---  โ”† ---  โ”† ---  โ”‚
# โ”‚ str  โ”† str  โ”† str  โ”† str  โ”† str  โ”† str  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0   โ”† B0   โ”† C0   โ”† D0   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2   โ”† B2   โ”† C1   โ”† D1   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2   โ”† B2   โ”† C2   โ”† D2   โ”‚
# โ”‚ K2   โ”† K0   โ”† null โ”† null โ”† C3   โ”† D3   โ”‚
# โ”‚ K2   โ”† K1   โ”† A3   โ”† B3   โ”† null โ”† null โ”‚
# โ”‚ K0   โ”† K1   โ”† A1   โ”† B1   โ”† null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ไบคๅทฎ็ตๅˆ๏ผˆhow="cross"๏ผ‰ใ‚‚ๅฏ่ƒฝใงใ™ใ€‚

left.join(right, on=["key1", "key2"], how="cross")
# shape: (16, 8)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”† key1_right โ”† key2_right โ”† C   โ”† D   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”† ---        โ”† ---        โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”† str        โ”† str        โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† K0         โ”† K0         โ”† C0  โ”† D0  โ”‚
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† K1         โ”† K0         โ”† C1  โ”† D1  โ”‚
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† K1         โ”† K0         โ”† C2  โ”† D2  โ”‚
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”† K2         โ”† K0         โ”† C3  โ”† D3  โ”‚
# โ”‚ K0   โ”† K1   โ”† A1  โ”† B1  โ”† K0         โ”† K0         โ”† C0  โ”† D0  โ”‚
# โ”‚ โ€ฆ    โ”† โ€ฆ    โ”† โ€ฆ   โ”† โ€ฆ   โ”† โ€ฆ          โ”† โ€ฆ          โ”† โ€ฆ   โ”† โ€ฆ   โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”† K2         โ”† K0         โ”† C3  โ”† D3  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”† K0         โ”† K0         โ”† C0  โ”† D0  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”† K1         โ”† K0         โ”† C1  โ”† D1  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”† K1         โ”† K0         โ”† C2  โ”† D2  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”† K2         โ”† K0         โ”† C3  โ”† D3  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

pandasใซใฏใชใ„ๆฉŸ่ƒฝใจใ—ใฆใ€how="semi"ใจhow="anti"ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใ‚Œใฏ็ตๅˆใงใฏใชใ่กŒใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐใงใ€how="semi"ใฏๅณใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅญ˜ๅœจใ™ใ‚‹ใ‚ญใƒผใ‚’ๆŒใค่กŒใ ใ‘ใ‚’ๆฎ‹ใ—ใ€how="anti"ใฏๅณใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใซๅญ˜ๅœจใ—ใชใ„ใ‚ญใƒผใ‚’ๆŒใค่กŒใ ใ‘ใ‚’ๆฎ‹ใ—ใพใ™ใ€‚

left.join(right, on=["key1", "key2"], how="semi")
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K0   โ”† A0  โ”† B0  โ”‚
# โ”‚ K1   โ”† K0   โ”† A2  โ”† B2  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

left.join(right, on=["key1", "key2"], how="anti")
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ key1 โ”† key2 โ”† A   โ”† B   โ”‚
# โ”‚ ---  โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ str  โ”† str  โ”† str โ”† str โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ K0   โ”† K1   โ”† A1  โ”† B1  โ”‚
# โ”‚ K2   โ”† K1   โ”† A3  โ”† B3  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

GroupBy

ใ‚ฐใƒซใƒผใƒ—ใ”ใจใซ้–ขๆ•ฐใ‚’้ฉ็”จใ™ใ‚‹ๅ ดๅˆใฏ.group_by()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚pandasใฎ.groupby()ใจๅŒๆง˜ใซใ€ๅˆ—ๅใพใŸใฏๅˆ—ๅใฎใƒชใ‚นใƒˆใ‚’ใ‚ญใƒผใจใ—ใฆๆธกใ™ใ“ใจใŒใงใใพใ™ใ€‚็ตๆžœใฎใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฏใ€pandasใงใฏใ‚ฐใƒซใƒผใƒ—ใ‚ญใƒผใซๅŸบใฅใ„ใฆใ‚ฝใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ™ใŒใ€polarsใงใฏ่กŒใฎไธฆใณ้ †ใฏใƒฉใƒณใƒ€ใƒ ใงใ™๏ผˆๅŒใ˜ใ‚ณใƒผใƒ‰ใงใ‚‚่จˆ็ฎ—ใ™ใ‚‹ใŸใณใซๅค‰ใ‚ใ‚Šใพใ™๏ผ‰ใ€‚

rng = np.random.default_rng(0)
df = pl.DataFrame(
    {
        "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
        "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
        "C": rng.random(8),
        "D": rng.random(8),
    }
)
# shape: (8, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 0.636962 โ”† 0.543625 โ”‚
# โ”‚ bar โ”† one   โ”† 0.269787 โ”† 0.935072 โ”‚
# โ”‚ foo โ”† two   โ”† 0.040974 โ”† 0.815854 โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”† 0.002739 โ”‚
# โ”‚ foo โ”† two   โ”† 0.81327  โ”† 0.857404 โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”† 0.033586 โ”‚
# โ”‚ foo โ”† one   โ”† 0.606636 โ”† 0.729655 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”† 0.175656 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.group_by("A", "B").sum()
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 1.243597 โ”† 1.27328  โ”‚
# โ”‚ foo โ”† two   โ”† 0.854244 โ”† 1.673258 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”† 0.175656 โ”‚
# โ”‚ bar โ”† one   โ”† 0.269787 โ”† 0.935072 โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”† 0.033586 โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”† 0.002739 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ฐใƒซใƒผใƒ—ใ‚ญใƒผใซใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ๆธกใ™ใ“ใจใ‚‚ใงใใพใ™ใ€‚

df.group_by("A", pl.col("B").str.to_uppercase().alias("BIG_B")).first()
# shape: (6, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† BIG_B โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† ONE   โ”† one   โ”† 0.636962 โ”† 0.543625 โ”‚
# โ”‚ foo โ”† TWO   โ”† two   โ”† 0.040974 โ”† 0.815854 โ”‚
# โ”‚ foo โ”† THREE โ”† three โ”† 0.729497 โ”† 0.175656 โ”‚
# โ”‚ bar โ”† ONE   โ”† one   โ”† 0.269787 โ”† 0.935072 โ”‚
# โ”‚ bar โ”† TWO   โ”† two   โ”† 0.912756 โ”† 0.033586 โ”‚
# โ”‚ bar โ”† THREE โ”† three โ”† 0.016528 โ”† 0.002739 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

polarsใงใฏใ‚ฐใƒซใƒผใƒ—ใ‚ญใƒผใซNaNใƒปnullใŒใ‚ใ‚‹่กŒใ‚‚ไฟๆŒใ•ใ‚Œใพใ™๏ผˆpandasใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ‚ฐใƒซใƒผใƒ—ใ‚ญใƒผใŒnanใƒปNAใฎ่กŒใฏๅ‰Š้™คใ•ใ‚Œใพใ™๏ผ‰ใ€‚

dfna = pl.DataFrame(
    [[np.nan, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]], schema="ABCD"
)
# shape: (3, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B    โ”† C   โ”† D   โ”‚
# โ”‚ --- โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ f64 โ”† i64  โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ NaN โ”† 1    โ”† 2   โ”† 1   โ”‚
# โ”‚ 2.0 โ”† null โ”† 1   โ”† 2   โ”‚
# โ”‚ 3.0 โ”† 4    โ”† 3   โ”† 2   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

dfna.group_by("A").sum()
# shape: (3, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B    โ”† C   โ”† D   โ”‚
# โ”‚ --- โ”† ---  โ”† --- โ”† --- โ”‚
# โ”‚ f64 โ”† i64  โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ NaN โ”† 1    โ”† 2   โ”† 1   โ”‚
# โ”‚ 2.0 โ”† 0    โ”† 1   โ”† 2   โ”‚
# โ”‚ 3.0 โ”† 4    โ”† 3   โ”† 2   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

dfna.group_by("B").sum()
# shape: (3, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ B    โ”† A   โ”† C   โ”† D   โ”‚
# โ”‚ ---  โ”† --- โ”† --- โ”† --- โ”‚
# โ”‚ i64  โ”† f64 โ”† i64 โ”† i64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 4    โ”† 3.0 โ”† 3   โ”† 2   โ”‚
# โ”‚ null โ”† 2.0 โ”† 1   โ”† 2   โ”‚
# โ”‚ 1    โ”† NaN โ”† 2   โ”† 1   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

GroupByใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ

GroupByใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ‚คใƒ†ใƒฌใƒผใ‚ฟใจใ—ใฆใ‚‚ๅ‹•ไฝœใ—ใพใ™ใ€‚ใ‚คใƒ†ใƒฌใƒผใ‚ฟใจใ—ใฆ็”จใ„ใ‚‹ใจใ€itertoolsใ‚„pandasใฎใ‚ˆใ†ใซใ€(ใ‚ฐใƒซใƒผใƒ—ๅใฎใ‚ฟใƒ—ใƒซ, ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ )ใฎใ‚ฟใƒ—ใƒซใ‚’ๅ–ๅพ—ใงใใพใ™ใ€‚

grouped = df.group_by("A")
type(grouped)
# <class 'polars.dataframe.group_by.GroupBy'>

for group_name, group_df in grouped:
    print(f"{group_name = }")
    print(group_df)
    print("---")
# group_name = ('foo',)
# shape: (5, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 0.636962 โ”† 0.543625 โ”‚
# โ”‚ foo โ”† two   โ”† 0.040974 โ”† 0.815854 โ”‚
# โ”‚ foo โ”† two   โ”† 0.81327  โ”† 0.857404 โ”‚
# โ”‚ foo โ”† one   โ”† 0.606636 โ”† 0.729655 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”† 0.175656 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# ---
# group_name = ('bar',)
# shape: (3, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ bar โ”† one   โ”† 0.269787 โ”† 0.935072 โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”† 0.002739 โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”† 0.033586 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# ---

้›†่จˆ

้›†่จˆใฏใ€ใ‚ฐใƒซใƒผใƒ—ใ‚ญใƒผไปฅๅค–ใฎใ™ในใฆใฎๅˆ—ใซ้ฉ็”จใ™ใ‚‹ๅ ดๅˆใฏใ€ๆ—ขใซ็ดนไป‹ใ—ใŸใ‚ˆใ†ใซGroupbyใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚

df.group_by("A", "B").head()
# shape: (8, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”† D        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 0.636962 โ”† 0.543625 โ”‚
# โ”‚ foo โ”† one   โ”† 0.606636 โ”† 0.729655 โ”‚
# โ”‚ foo โ”† two   โ”† 0.040974 โ”† 0.815854 โ”‚
# โ”‚ foo โ”† two   โ”† 0.81327  โ”† 0.857404 โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”† 0.002739 โ”‚
# โ”‚ bar โ”† one   โ”† 0.269787 โ”† 0.935072 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”† 0.175656 โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”† 0.033586 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.group_by("A", "B").len()
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† count โ”‚
# โ”‚ --- โ”† ---   โ”† ---   โ”‚
# โ”‚ str โ”† str   โ”† u32   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 2     โ”‚
# โ”‚ foo โ”† three โ”† 1     โ”‚
# โ”‚ bar โ”† two   โ”† 1     โ”‚
# โ”‚ foo โ”† two   โ”† 2     โ”‚
# โ”‚ bar โ”† one   โ”† 1     โ”‚
# โ”‚ bar โ”† three โ”† 1     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅˆ—ใ”ใจใซ้ฉ็”จใ™ใ‚‹ๅ ดๅˆใฏใ€.agg()ใซใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚’ๆธกใ—ใพใ™ใ€‚polarsใงใฏๅˆ—ๅใฎ้‡่ค‡ใ‚’่จฑใ•ใชใ„ใฎใงใ€ๅŒใ˜ๅˆ—ใซ็•ฐใชใ‚‹้–ขๆ•ฐใ‚’้ฉ็”จใ—ใŸๅ ดๅˆใฏ.alias()ใƒป.name.prefix()ใƒป.name.suffix()ใชใฉใง้ฉๅฎœๅˆ—ๅใ‚’่ชฟๆ•ดใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

df.group_by("A", "B").agg(
    pl.sum("*").name.suffix("_sum"),
    pl.mean("C").name.suffix("_mean"),
    pl.std("D").name.suffix("_std"),
)
# shape: (6, 6)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C_sum    โ”† D_sum    โ”† C_mean   โ”† D_std    โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”† ---      โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”† f64      โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ bar โ”† one   โ”† 0.269787 โ”† 0.935072 โ”† 0.269787 โ”† null     โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”† 0.002739 โ”† 0.016528 โ”† null     โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”† 0.033586 โ”† 0.912756 โ”† null     โ”‚
# โ”‚ foo โ”† one   โ”† 1.243597 โ”† 1.27328  โ”† 0.621799 โ”† 0.131543 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”† 0.175656 โ”† 0.729497 โ”† null     โ”‚
# โ”‚ foo โ”† two   โ”† 0.854244 โ”† 1.673258 โ”† 0.427122 โ”† 0.029381 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒ”ใƒœใƒƒใƒˆใƒ†ใƒผใƒ–ใƒซ

DataFrame.pivot()ใงใƒ”ใƒœใƒƒใƒˆใƒ†ใƒผใƒ–ใƒซใ‚’ไฝœๆˆใ—ใพใ™ใ€‚็ฌฌ1ๅผ•ๆ•ฐon=ใซใ€ๆจชๆŒใกใซใ•ใ›ใŸใ„ๅˆ—ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚็ธฆๆŒใกใจใ—ใฆ็ถญๆŒใ™ใ‚‹ๅˆ—ใฏindex=ๅผ•ๆ•ฐใ€ๅ€คใซใ™ใ‚‹ๅˆ—ใฏvalue=ๅผ•ๆ•ฐใ€้›†่จˆ้–ขๆ•ฐใฏaggregate_function=ๅผ•ๆ•ฐใจใ—ใฆๆธกใ—ใพใ™ใ€‚pandasใฎDataFrame.pivot_table()ใซ็›ธๅฝ“ใ—ใพใ™ใ€‚

pivot_table = df.pivot(on="B", index="A", values="C", aggregate_function="sum")
# shape: (2, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† one      โ”† two      โ”† three    โ”‚
# โ”‚ --- โ”† ---      โ”† ---      โ”† ---      โ”‚
# โ”‚ str โ”† f64      โ”† f64      โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† 1.243597 โ”† 0.854244 โ”† 0.729497 โ”‚
# โ”‚ bar โ”† 0.269787 โ”† 0.912756 โ”† 0.016528 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€ใƒ”ใƒœใƒƒใƒˆใƒ†ใƒผใƒ–ใƒซใ‚’ๆˆปใ™ๅ ดๅˆใฏ.unpivot()ใ‚’็”จใ„ใพใ™ใ€‚pandasใฎ.melt()๏ผˆใ‚ใ‚‹ใ„ใฏ.unstack()๏ผ‰ใซ็›ธๅฝ“ใ—ใพใ™ใ€‚

pivot_table.unpivot(
    index="A", on=["one", "two", "three"], variable_name="B", value_name="C"
)
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B     โ”† C        โ”‚
# โ”‚ --- โ”† ---   โ”† ---      โ”‚
# โ”‚ str โ”† str   โ”† f64      โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ foo โ”† one   โ”† 1.243597 โ”‚
# โ”‚ bar โ”† one   โ”† 0.269787 โ”‚
# โ”‚ foo โ”† two   โ”† 0.854244 โ”‚
# โ”‚ bar โ”† two   โ”† 0.912756 โ”‚
# โ”‚ foo โ”† three โ”† 0.729497 โ”‚
# โ”‚ bar โ”† three โ”† 0.016528 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆฌ ๆๅ€คใƒปๆฌ ๆใƒ‡ใƒผใ‚ฟใฎๆ‰ฑใ„

ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ไฝœๆˆใฎ้š›ใซ่ฆ็ด ใจใ—ใฆNoneใŒๆธกใ•ใ‚Œใ‚‹ใจใ€ๆฌ ๆๅ€คnullใจใฟใชใ•ใ‚Œใพใ™ใ€‚ใŸใ ใ—ใ€ๆตฎๅ‹•ๅฐๆ•ฐๅž‹ใซใ‚ญใƒฃใ‚นใƒˆใงใใ‚‹ใจใใซnp.nanใŒๆธกใ•ใŸๅ ดๅˆใซใฏใ€NaNใจใฟใชใ•ใ‚Œใพใ™ใ€‚

ๅ…จใฆใฎใƒ‡ใƒผใ‚ฟๅž‹ใŒ่ฆ็ด ใจใ—ใฆNaNใ‚’ๆŒใคใ“ใจใŒใงใใ€ๆตฎๅ‹•ๅฐๆ•ฐใƒ‡ใƒผใ‚ฟๅž‹ใฎใ‚ทใƒชใƒผใ‚บใงใฏnullใจNaNใŒๅ…ฑๅญ˜ใงใใพใ™ใ€‚

df_missing = pl.DataFrame(
    {"A": [1, 2, None, 4, None, None], "B": [np.nan, 4, 3, 2, np.nan, None]}
)

df_missing
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”‚
# โ”‚ ---  โ”† ---  โ”‚
# โ”‚ i64  โ”† f64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† NaN  โ”‚
# โ”‚ 2    โ”† 4.0  โ”‚
# โ”‚ null โ”† 3.0  โ”‚
# โ”‚ 4    โ”† 2.0  โ”‚
# โ”‚ null โ”† NaN  โ”‚
# โ”‚ null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆฌ ๆๅ€คใฎ็ขบ่ช

nullใ‹ใฉใ†ใ‹ใฎ็œŸๅฝๅ€คใฏ.is_null()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ใ€NaNใ‹ใฉใ†ใ‹ใฎ็œŸๅฝๅ€คใฏ.is_nan()ใƒกใ‚ฝใƒƒใƒ‰ใงๅพ—ใ‚‰ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฏใฉใกใ‚‰ใ‚‚ใ‚ทใƒชใƒผใ‚บใพใŸใฏใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฎใฟใซๅญ˜ๅœจใ™ใ‚‹ใƒกใ‚ฝใƒƒใƒ‰ใงใ€ใƒ‡ใƒผใ‚ฟใƒ•ใƒฌใƒผใƒ ใฎใƒกใ‚ฝใƒƒใƒ‰ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚

df_missing.with_columns(
    A_is_null=pl.col("A").is_null(),
    B_is_null=pl.col("B").is_null(),
    B_is_nan=pl.col("B").is_nan(),
)
# shape: (6, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”† A_is_null โ”† B_is_null โ”† B_is_nan โ”‚
# โ”‚ ---  โ”† ---  โ”† ---       โ”† ---       โ”† ---      โ”‚
# โ”‚ i64  โ”† f64  โ”† bool      โ”† bool      โ”† bool     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† NaN  โ”† false     โ”† false     โ”† true     โ”‚
# โ”‚ 2    โ”† 4.0  โ”† false     โ”† false     โ”† false    โ”‚
# โ”‚ null โ”† 3.0  โ”† true      โ”† false     โ”† false    โ”‚
# โ”‚ 4    โ”† 2.0  โ”† false     โ”† false     โ”† false    โ”‚
# โ”‚ null โ”† NaN  โ”† true      โ”† false     โ”† true     โ”‚
# โ”‚ null โ”† null โ”† true      โ”† true      โ”† null     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.null_count()ใƒกใ‚ฝใƒƒใƒ‰ใฏnullใฎๆ•ฐใ‚’้›†่จˆใ—ใพใ™ใ€‚

df_missing.null_count()
# shape: (1, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”‚
# โ”‚ --- โ”† --- โ”‚
# โ”‚ u32 โ”† u32 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 3   โ”† 1   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ทใƒชใƒผใ‚บใพใŸใฏใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฎ.count()ใƒกใ‚ฝใƒƒใƒ‰ใฏnullใ‚’้™คใ„ใŸใƒ‡ใƒผใ‚ฟใฎๆ•ฐใ‚’้›†่จˆใ—ใพใ™ใ€‚

df_missing.select(
    pl.all().count().name.suffix("_count"),
    pl.all().len().name.suffix("_len"),
)
# shape: (1, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A_count โ”† B_count โ”† A_len โ”† B_len โ”‚
# โ”‚ ---     โ”† ---     โ”† ---   โ”† ---   โ”‚
# โ”‚ u32     โ”† u32     โ”† u32   โ”† u32   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 3       โ”† 5       โ”† 6     โ”† 6     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆฌ ๆๅ€คใฎไผๆฌ

nullใพใŸใฏNaNใซๅฏพใ™ใ‚‹ๆ•ฐๅ€คๆผ”็ฎ—ใงใฏnullใพใŸใฏNaNใŒ็ถญๆŒใ•ใ‚Œใพใ™ใ€‚nullใจNaNใฎ็ต„ใฟๅˆใ‚ใ›ใงๆผ”็ฎ—ใ‚’ๅฎŸ่กŒใ—ใŸๅ ดๅˆใฏnullใŒๅ„ชๅ…ˆใ•ใ‚Œใพใ™๏ผˆๅพŒ่ฟฐใ™ใ‚‹้›†่จˆ้–ขๆ•ฐใจใฎ้•ใ„ใซๆณจๆ„๏ผ‰ใ€‚

df_missing.with_columns(
    A_plus_B=pl.col("A") + pl.col("B"),  # ๅŠ ็ฎ—ๆผ”็ฎ—ใซใ‚ˆใ‚‹AใจBใฎๅ’Œ
    sum_A_B=pl.sum_horizontal("A", "B"),  # ้›†่จˆ้–ขๆ•ฐใซใ‚ˆใ‚‹AใจBใฎๅ’Œ
)
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”† A_plus_B โ”† sum_A_B โ”‚
# โ”‚ ---  โ”† ---  โ”† ---      โ”† ---     โ”‚
# โ”‚ i64  โ”† f64  โ”† f64      โ”† f64     โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† NaN  โ”† NaN      โ”† NaN     โ”‚
# โ”‚ 2    โ”† 4.0  โ”† 6.0      โ”† 6.0     โ”‚
# โ”‚ null โ”† 3.0  โ”† null     โ”† 3.0     โ”‚
# โ”‚ 4    โ”† 2.0  โ”† 6.0      โ”† 6.0     โ”‚
# โ”‚ null โ”† NaN  โ”† null     โ”† NaN     โ”‚
# โ”‚ null โ”† null โ”† null     โ”† 0.0     โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

nullใซๅฏพใ™ใ‚‹ๆฏ”่ผƒๆผ”็ฎ—ใฎ็ตๆžœใฏๅธธใซnullใซใชใ‚Šใพใ™ใ€‚nullใจNaNใจใฎๆฏ”่ผƒๆผ”็ฎ—ใฎ็ตๆžœใ‚‚nullใซใชใ‚Šใพใ™ใ€‚NaNใจๆ•ฐๅ€คใจใฎๆฏ”่ผƒๆผ”็ฎ—ใฎ็ตๆžœใฏๅธธใซFalseใซใชใ‚Šใพใ™ใ€‚

df_missing.with_columns(
    gt=(pl.col("A") > pl.col("B")),
    eq=(pl.col("A") == pl.col("B")),
)
# shape: (6, 4)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”† gt    โ”† eq    โ”‚
# โ”‚ ---  โ”† ---  โ”† ---   โ”† ---   โ”‚
# โ”‚ i64  โ”† f64  โ”† bool  โ”† bool  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† NaN  โ”† false โ”† false โ”‚
# โ”‚ 2    โ”† 4.0  โ”† false โ”† false โ”‚
# โ”‚ null โ”† 3.0  โ”† null  โ”† null  โ”‚
# โ”‚ 4    โ”† 2.0  โ”† true  โ”† false โ”‚
# โ”‚ null โ”† NaN  โ”† null  โ”† null  โ”‚
# โ”‚ null โ”† null โ”† null  โ”† null  โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

้›†่จˆ้–ขๆ•ฐใฏnullใ‚’็„ก่ฆ–ใ—ใฆ่จˆ็ฎ—ใ—ใพใ™ใŒใ€NaNใ‚’ๅซใ‚€ๅ ดๅˆใฏNaNใซใชใ‚Šใพใ™ใ€‚

df_missing.sum()
# shape: (1, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”‚
# โ”‚ --- โ”† --- โ”‚
# โ”‚ i64 โ”† f64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 7   โ”† NaN โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

df_missing.describe()
# shape: (9, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ statistic  โ”† A        โ”† B   โ”‚
# โ”‚ ---        โ”† ---      โ”† --- โ”‚
# โ”‚ str        โ”† f64      โ”† f64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ count      โ”† 3.0      โ”† 5.0 โ”‚
# โ”‚ null_count โ”† 3.0      โ”† 1.0 โ”‚
# โ”‚ mean       โ”† 2.333333 โ”† NaN โ”‚
# โ”‚ std        โ”† 1.527525 โ”† NaN โ”‚
# โ”‚ min        โ”† 1.0      โ”† 2.0 โ”‚
# โ”‚ 25%        โ”† 2.0      โ”† 3.0 โ”‚
# โ”‚ 50%        โ”† 2.0      โ”† 4.0 โ”‚
# โ”‚ 75%        โ”† 4.0      โ”† NaN โ”‚
# โ”‚ max        โ”† 4.0      โ”† 4.0 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ๆฌ ๆๅ€คใฎ็ฉดๅŸ‹ใ‚

nullใ‚’ไป–ใฎๅ€คใซ็ฝฎๆ›ใ™ใ‚‹ๅ ดๅˆใฏ.fill_null()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ใ€NaNใ‚’ไป–ใฎๅ€คใซ็ฝฎๆ›ใ™ใ‚‹ๅ ดๅˆใฏ.fill_nan()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚

df_missing.fill_null(99)
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B    โ”‚
# โ”‚ --- โ”† ---  โ”‚
# โ”‚ i64 โ”† f64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1   โ”† NaN  โ”‚
# โ”‚ 2   โ”† 4.0  โ”‚
# โ”‚ 99  โ”† 3.0  โ”‚
# โ”‚ 4   โ”† 2.0  โ”‚
# โ”‚ 99  โ”† NaN  โ”‚
# โ”‚ 99  โ”† 99.0 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_missing.fill_nan(99)
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”‚
# โ”‚ ---  โ”† ---  โ”‚
# โ”‚ i64  โ”† f64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† 99.0 โ”‚
# โ”‚ 2    โ”† 4.0  โ”‚
# โ”‚ null โ”† 3.0  โ”‚
# โ”‚ 4    โ”† 2.0  โ”‚
# โ”‚ null โ”† 99.0 โ”‚
# โ”‚ null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.fill_null()ใ‚„.fill_nan()ใซใฏใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ‚„ใ‚ทใƒชใƒผใ‚บใ‚’ๆธกใ™ใ“ใจใŒใงใใพใ™ใ€‚

df_missing.fill_null(pl.Series([11, 12, 13, 14, 15, 16]))
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B    โ”‚
# โ”‚ --- โ”† ---  โ”‚
# โ”‚ i64 โ”† f64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1   โ”† NaN  โ”‚
# โ”‚ 2   โ”† 4.0  โ”‚
# โ”‚ 13  โ”† 3.0  โ”‚
# โ”‚ 4   โ”† 2.0  โ”‚
# โ”‚ 15  โ”† NaN  โ”‚
# โ”‚ 16  โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df_missing.fill_nan(pl.col("A"))
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A    โ”† B    โ”‚
# โ”‚ ---  โ”† ---  โ”‚
# โ”‚ i64  โ”† f64  โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 1    โ”† 1.0  โ”‚
# โ”‚ 2    โ”† 4.0  โ”‚
# โ”‚ null โ”† 3.0  โ”‚
# โ”‚ 4    โ”† 2.0  โ”‚
# โ”‚ null โ”† null โ”‚
# โ”‚ null โ”† null โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.fill_null()ใƒกใ‚ฝใƒƒใƒ‰ใฏ็‰นๅฎšใฎใ‚ญใƒผใƒฏใƒผใƒ‰ใ‚’ไธŽใˆใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ๅนณๅ‡ๅ€คใง็ฉดๅŸ‹ใ‚ใ™ใ‚‹ๅ ดๅˆใฏstrategy="mean"ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

df_missing.fill_null(strategy="mean")
# shape: (6, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ A   โ”† B   โ”‚
# โ”‚ --- โ”† --- โ”‚
# โ”‚ i64 โ”† f64 โ”‚
# โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
# โ”‚ 1   โ”† NaN โ”‚
# โ”‚ 2   โ”† 4.0 โ”‚
# โ”‚ 2   โ”† 3.0 โ”‚
# โ”‚ 4   โ”† 2.0 โ”‚
# โ”‚ 2   โ”† NaN โ”‚
# โ”‚ 2   โ”† NaN โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

strategy=ๅผ•ๆ•ฐใฏใ€"mean"ใฎไป–ใ€"forward"ใƒป"backward"ใƒป"min"ใƒป"max"ใƒป"zero"ใƒป"one"ใ‚’ๅ—ใ‘ๅ…ฅใ‚Œใพใ™ใ€‚

ใƒ†ใ‚ญใ‚นใƒˆใƒ‡ใƒผใ‚ฟใ‚’ๆ‰ฑใ†

ใ‚ทใƒชใƒผใ‚บใŠใ‚ˆใณใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใซใฏ.strใ‚ขใ‚ฏใ‚ปใ‚ตใ‚’ไป‹ใ—ใŸๆ–‡ๅญ—ๅˆ—ใƒกใ‚ฝใƒƒใƒ‰ใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

df_str = pl.DataFrame(
    {"orig": ["A", "B", "Aaba", "Baca", None, "CABA", "dog", "cat"]}
)

df_str.with_columns(
    # ใ‚ทใƒชใƒผใ‚บใฎๆ“ไฝœ
    df_str.get_column("orig").str.len_bytes().alias("len"),
    df_str.get_column("orig").str.to_lowercase().alias("lower"),
    # ใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฎๆ“ไฝœ
    pl.col("orig").str.to_uppercase().alias("upper"),
    pl.col("orig").str.slice(1, 3).alias("slice"),
)
# shape: (8, 5)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ orig โ”† len  โ”† lower โ”† upper โ”† slice โ”‚
# โ”‚ ---  โ”† ---  โ”† ---   โ”† ---   โ”† ---   โ”‚
# โ”‚ str  โ”† u32  โ”† str   โ”† str   โ”† str   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ A    โ”† 1    โ”† a     โ”† A     โ”†       โ”‚
# โ”‚ B    โ”† 1    โ”† b     โ”† B     โ”†       โ”‚
# โ”‚ Aaba โ”† 4    โ”† aaba  โ”† AABA  โ”† aba   โ”‚
# โ”‚ Baca โ”† 4    โ”† baca  โ”† BACA  โ”† aca   โ”‚
# โ”‚ null โ”† null โ”† null  โ”† null  โ”† null  โ”‚
# โ”‚ CABA โ”† 4    โ”† caba  โ”† CABA  โ”† ABA   โ”‚
# โ”‚ dog  โ”† 3    โ”† dog   โ”† DOG   โ”† og    โ”‚
# โ”‚ cat  โ”† 3    โ”† cat   โ”† CAT   โ”† at    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅŠ ็ฎ—ๆผ”็ฎ—ๅญ+ใงๆ–‡ๅญ—ๅˆ—ใ‚’็ตๅˆใงใใพใ™ใ€‚

df_str.select(pl.col("orig") + "_" + pl.col("orig"))
# shape: (8, 1)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ orig      โ”‚
# โ”‚ ---       โ”‚
# โ”‚ str       โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ A_A       โ”‚
# โ”‚ B_B       โ”‚
# โ”‚ Aaba_Aaba โ”‚
# โ”‚ Baca_Baca โ”‚
# โ”‚ null      โ”‚
# โ”‚ CABA_CABA โ”‚
# โ”‚ dog_dog   โ”‚
# โ”‚ cat_cat   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒ†ใ‚ญใ‚นใƒˆใฎๆ–‡ๅญ—ๆ•ฐใ‚’็ฎ—ๅ‡บ

ๆ–‡ๅญ—ๆ•ฐใ‚’ๆ•ฐใˆใ‚‹ใซใฏ.str.len_bytes()ใพใŸใฏ.str.len_chars()ใ‚’ไฝฟใ„ใพใ™ใ€‚ไธ€่ˆฌ็š„ใช่‹ฑๆ•ฐๅญ—ใฎใฟใ‚’ๆ‰ฑใฃใฆใ„ใ‚‹ๅ ดๅˆใฏ.str.len_bytes()ใ‚’็”จใ„ใ‚‹ใฎใŒ่‰ฏใ„ใงใ™ใŒใ€ใ“ใ‚ŒใฏๅฎŸ้š›ใซใฏใƒใ‚คใƒˆๆ•ฐใ‚’ๆ•ฐใˆใฆใ„ใ‚‹ใŸใ‚ใ€็ตๅˆๆ–‡ๅญ—ใ‚„ๅ…จ่ง’ๆ–‡ๅญ—ใ‚’ไฝฟใฃใฆใ„ใ‚‹ๅ ดๅˆใฏ.str.len_chars()ใ‚’ไฝฟใ†ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚่จˆ็ฎ—้€Ÿๅบฆใฏ.str.len_bytes()ใฎๆ–นใŒ้ซ˜้€Ÿใงใ™ใ€‚

pl.DataFrame({"a": ["Tokyo", "ๆฑไบฌ", "Cafe", "Cafรฉ", "Cafeฬ", None]}).with_columns(
    pl.col("a").str.len_bytes().alias("len_bytes"),
    pl.col("a").str.len_chars().alias("len_chars"),
)
# shape: (6, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ a     โ”† len_bytes โ”† len_chars โ”‚
# โ”‚ ---   โ”† ---       โ”† ---       โ”‚
# โ”‚ str   โ”† u32       โ”† u32       โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ Tokyo โ”† 5         โ”† 5         โ”‚
# โ”‚ ๆฑไบฌ  โ”† 6         โ”† 2         โ”‚
# โ”‚ Cafe  โ”† 4         โ”† 4         โ”‚
# โ”‚ Cafรฉ  โ”† 5         โ”† 4         โ”‚
# โ”‚ Cafeฬ  โ”† 6         โ”† 5         โ”‚
# โ”‚ null  โ”† null      โ”† null      โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆญฃ่ฆ่กจ็พๆคœ็ดขใงไธ€่‡ด้ƒจๅˆ†ใ‚’ๆŠฝๅ‡บ

.str.extract()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ€ใ‚ญใƒฃใƒ—ใƒใƒฃใ‚ฐใƒซใƒผใƒ—"()"ใ‚’ๅซใ‚€ๆญฃ่ฆ่กจ็พใ‚’ๆธกใ™ใจใ€ใƒžใƒƒใƒใ—ใŸ้ƒจๅˆ†ใ‚’่ฟ”ใ—ใพใ™ใ€‚

ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏๆœ€ๅˆใฎใƒžใƒƒใƒใ‚ฐใƒซใƒผใƒ—๏ผˆใคใพใ‚Š"$1"๏ผ‰ใ‚’่ฟ”ใ—ใพใ™ใ€‚"$2"ใŒๆฌฒใ—ใ„ๅ ดๅˆใฏใ€group_index=ใ‚ญใƒผใƒฏใƒผใƒ‰ใซ2ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใ‚ฐใƒซใƒผใƒ—ใ‚’่ค‡ๆ•ฐๅ–ๅพ—ใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚

pl.Series(["a1a2", "b1", "c1"]).str.extract(r"([ab])?(\d)")
# shape: (3,)
# Series: '' [str]
# [
#     "a"
#     "b"
#     null
# ]

pl.Series(["a1a2", "b1", "c1"]).str.extract(r"([ab])?(\d)", group_index=2)
# shape: (3,)
# Series: '' [str]
# [
#     "1"
#     "1"
#     "1"
# ]

็‰นๅฎšใฎๆ–‡ๅญ—ๅˆ—ใ‚’ๅซใ‚€ใ‹ใฉใ†ใ‹ใ‚’ๆคœ็ดข

.str.contains()ใƒกใ‚ฝใƒƒใƒ‰ใฏใ€ๆธกใ•ใ‚ŒใŸๆ–‡ๅญ—ๅˆ—ใ‚’ ๅซใ‚€ ใ‹ใฉใ†ใ‹ใฎ็œŸๅฝๅ€คใ‚’่ฟ”ใ—ใพใ™ใ€‚ๆญฃ่ฆ่กจ็พใŒไฝฟ็”จใงใใพใ™ใ€‚

polarsใฎๆ–‡ๅญ—ๅˆ—ใƒกใ‚ฝใƒƒใƒ‰ใซใฏใ„ใ‚ใ‚†ใ‚‹matchใ‚„fullmatchใฏใ‚ใ‚Šใพใ›ใ‚“ใฎใงใ€ใ“ใฎ.str.contains()ใƒกใ‚ฝใƒƒใƒ‰ใงไปฃ็”จใ—ใฆใใ ใ•ใ„ใ€‚

pl.Series(["1", "2", "3a", "3b", "03c", "4dx"]).str.contains(r"[0-9][a-z]")
# shape: (6,)
# Series: '' [bool]
# [
#     false
#     false
#     true
#     true
#     true
#     true
# ]

ๆ–‡ๅญ—ๅˆ—ใฎๅ…ˆ้ ญใ‚„ๆœซๅฐพใซใŠใ‘ใ‚‹ไธ€่‡ดใ‚’็ขบ่ชใ™ใ‚‹ๅ ดๅˆใฏ.str.starts_with()ใ‚„.str.end_with()ใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจใ‚‚ๅฏ่ƒฝใงใ™ใ€‚

ๆญฃ่ฆ่กจ็พใซใ‚ˆใ‚‹ๆ–‡ๅญ—ๅˆ—ใฎ็ฝฎๆ›

ๆ–‡ๅญ—ๅˆ—ใฎ็ฝฎๆ›ใซใฏ.str.replace()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚

df_str["orig"].str.replace(r"^.a|dog", "XX-XX ")
# shape: (8,)
# Series: '' [str]
# [
#     "A"
#     "B"
#     "XX-XX ba"
#     "XX-XX ca"
#     null
#     "CABA"
#     "XX-XX "
#     "XX-XX t"
# ]

ๆ™‚็ณปๅˆ—ใƒ‡ใƒผใ‚ฟใ‚’ๆ‰ฑใ†

polarsใฎๆ™‚็ณปๅˆ—ใƒ‡ใƒผใ‚ฟใฏใ€Pythonใฎdatetimeใฎ้…ๅˆ—ใงใ™๏ผˆไธ€ๆ–นpandasใ‚„numpyใฏ็‹ฌ่‡ชใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝฟ็”จใ—ใพใ™๏ผ‰ใ€‚

ใชใŠใ€strptime()ใ‚„strftime()ใฎ้š›ใฎใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆๆ–‡ๅญ—ๅˆ—๏ผˆ"%Y/%m/%d %H:%M:%S"ใชใฉ๏ผ‰ใซใคใ„ใฆใฏใ“ใกใ‚‰ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

ใพใŸใ€ใ„ใใคใ‹ใฎ้–ขๆ•ฐใงๆ™‚้–“้–“้š”ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹้š›ใฎๆ–‡ๅญ—ๅˆ—่กจ่จ˜ใฏไปฅไธ‹ใฎ้€šใ‚Šใงใ™ใ€‚

  • "y"๏ผšๅนดใ€"mo"๏ผšๆœˆใ€"w"๏ผš้€ฑใ€"d"๏ผšๆ—ฅ
  • "h"๏ผšๆ™‚้–“ใ€"m"๏ผšๅˆ†ใ€"s"๏ผš็ง’ใ€"ms"๏ผšใƒŸใƒช็ง’ใ€"us"๏ผšใƒžใ‚คใ‚ฏใƒญ็ง’ใ€"ns"๏ผšใƒŠใƒŽ็ง’
  • "i"๏ผšใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚น

pl.date_range(), pl.datetime_range()้–ขๆ•ฐ

pl.date_range()้–ขๆ•ฐใจpl.datetime_range()้–ขๆ•ฐใฏใ€pandasใฎpd.date_range()้–ขๆ•ฐใซๅฏพๅฟœใ—ใพใ™ใ€‚

ๆ—ฅๆ™‚ใฎๅง‹็‚นใƒป็ต‚็‚นใฏPythonใฎdatetime.datetimeใ‚ฏใƒฉใ‚นใงใ€ๆ—ฅๆ™‚้–“้š”ใฏๆ–‡ๅญ—ๅˆ—ใ‚ญใƒผใƒฏใƒผใƒ‰ใพใŸใฏdatetime.timedeltaใงๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใพใŸใ€eager=False๏ผˆใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ๏ผ‰ใงใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใ€eager=Trueใงใ‚ทใƒชใƒผใ‚บใ‚’่ฟ”ใ—ใพใ™ใ€‚

pl.date_range(
    datetime.datetime(2022, 1, 1),
    datetime.datetime(2022, 1, 10),
    "1d",
    eager=True,
)
# shape: (10,)
# Series: 'literal' [date]
# [
#     2022-01-01
#     2022-01-02
#     2022-01-03
#     2022-01-04
#     2022-01-05
#     2022-01-06
#     2022-01-07
#     2022-01-08
#     2022-01-09
#     2022-01-10
# ]

pl.datetime_range(
    datetime.datetime(2022, 1, 1),
    datetime.datetime(2022, 1, 10),
    datetime.timedelta(days=1, hours=12),
    eager=True,
)
# shape: (7,)
# Series: 'literal' [datetime[ฮผs]]
# [
#     2022-01-01 00:00:00
#     2022-01-02 12:00:00
#     2022-01-04 00:00:00
#     2022-01-05 12:00:00
#     2022-01-07 00:00:00
#     2022-01-08 12:00:00
#     2022-01-10 00:00:00
# ]

ๆ–‡ๅญ—ๅˆ—ใ‹ใ‚‰ๆ™‚็ณปๅˆ—ใซๅค‰ๆ›ใ™ใ‚‹.str.strptime()

polarsใงใฏใ€ใ‚ทใƒชใƒผใ‚บใƒปใ‚จใ‚ฏใ‚นใƒ—ใƒฌใƒƒใ‚ทใƒงใƒณใฎๆ–‡ๅญ—ๅˆ—ใƒกใ‚ฝใƒƒใƒ‰ใซstrptime()ใŒๅฎŸ่ฃ…ใ•ใ‚Œใฆใ„ใพใ™ใ€‚็ฌฌไธ€ๅผ•ๆ•ฐใซใƒ‡ใƒผใ‚ฟๅž‹ใ€็ฌฌไบŒๅผ•ๆ•ฐใซใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆๆ–‡ๅญ—ๅˆ—ใ‚’ๆธกใ—ใพใ™ใ€‚

df_drange = pl.DataFrame(
    {
        "drange_str": [
            "2022-01-01 00:00:00",
            "2022-01-02 12:00:00",
            "2022-01-04 00:00:00",
            "2022-01-05 12:00:00",
            "2022-01-07 00:00:00",
            "2022-01-08 12:00:00",
            "2022-01-10 00:00:00",
        ]
    }
)

df_drange.get_column("drange_str").dtype
# String

df_drange.get_column("drange_str").str.strptime(pl.Datetime).dtype
# Datetime(time_unit='us', time_zone=None)

new_column = pl.col("drange_str").str.strptime(pl.Datetime).alias("drange")
df_drange.with_columns(new_column)
# shape: (7, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ drange_str          โ”† drange              โ”‚
# โ”‚ ---                 โ”† ---                 โ”‚
# โ”‚ str                 โ”† datetime[ฮผs]        โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2022-01-01 00:00:00 โ”† 2022-01-01 00:00:00 โ”‚
# โ”‚ 2022-01-02 12:00:00 โ”† 2022-01-02 12:00:00 โ”‚
# โ”‚ 2022-01-04 00:00:00 โ”† 2022-01-04 00:00:00 โ”‚
# โ”‚ 2022-01-05 12:00:00 โ”† 2022-01-05 12:00:00 โ”‚
# โ”‚ 2022-01-07 00:00:00 โ”† 2022-01-07 00:00:00 โ”‚
# โ”‚ 2022-01-08 12:00:00 โ”† 2022-01-08 12:00:00 โ”‚
# โ”‚ 2022-01-10 00:00:00 โ”† 2022-01-10 00:00:00 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใชใŠใ€.str.to_date()/.str.to_datetime()ใƒกใ‚ฝใƒƒใƒ‰ใงใ‚‚ๅŒๆง˜ใฎๅค‰ๆ›ใŒๅฏ่ƒฝใงใ™ใ€‚

ๆ™‚็ณปๅˆ—ใƒ‡ใƒผใ‚ฟใ‹ใ‚‰ไป–ใฎใƒ‡ใƒผใ‚ฟใธใฎๅค‰ๆ›

ๅนดๆœˆๆ—ฅใƒปๆ™‚ๅˆ†็ง’ใƒปใ‚จใƒใƒƒใ‚ฏใ‚ฟใ‚คใƒ ใธใฎๅค‰ๆ›ใฏ.dtใ‚’ไป‹ใ—ใฆๅ„ใƒกใ‚ฝใƒƒใƒ‰ใ‹ใ‚‰่กŒใ„ใพใ™๏ผˆpandasใจ้•ใ„ๅฑžๆ€งใ‚ขใ‚ฏใ‚ปใ‚นใงใฏใ‚ใ‚Šใพใ›ใ‚“๏ผ‰ใ€‚

df_drange = df_drange.select(new_column)
df_drange.select(
    pl.col("drange"),
    pl.col("drange").dt.year().alias("year"),
    pl.col("drange").dt.month().alias("month"),
    pl.col("drange").dt.day().alias("day"),
    pl.col("drange").dt.hour().alias("hour"),
    pl.col("drange").dt.minute().alias("minute"),
    pl.col("drange").dt.second().alias("second"),
    pl.col("drange").dt.epoch().alias("epoch"),
)
# shape: (7, 8)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ drange              โ”† year โ”† month โ”† day โ”† hour โ”† minute โ”† second โ”† epoch            โ”‚
# โ”‚ ---                 โ”† ---  โ”† ---   โ”† --- โ”† ---  โ”† ---    โ”† ---    โ”† ---              โ”‚
# โ”‚ datetime[ฮผs]        โ”† i32  โ”† i8    โ”† i8  โ”† i8   โ”† i8     โ”† i8     โ”† i64              โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2022-01-01 00:00:00 โ”† 2022 โ”† 1     โ”† 1   โ”† 0    โ”† 0      โ”† 0      โ”† 1640995200000000 โ”‚
# โ”‚ 2022-01-02 12:00:00 โ”† 2022 โ”† 1     โ”† 2   โ”† 12   โ”† 0      โ”† 0      โ”† 1641124800000000 โ”‚
# โ”‚ 2022-01-04 00:00:00 โ”† 2022 โ”† 1     โ”† 4   โ”† 0    โ”† 0      โ”† 0      โ”† 1641254400000000 โ”‚
# โ”‚ 2022-01-05 12:00:00 โ”† 2022 โ”† 1     โ”† 5   โ”† 12   โ”† 0      โ”† 0      โ”† 1641384000000000 โ”‚
# โ”‚ 2022-01-07 00:00:00 โ”† 2022 โ”† 1     โ”† 7   โ”† 0    โ”† 0      โ”† 0      โ”† 1641513600000000 โ”‚
# โ”‚ 2022-01-08 12:00:00 โ”† 2022 โ”† 1     โ”† 8   โ”† 12   โ”† 0      โ”† 0      โ”† 1641643200000000 โ”‚
# โ”‚ 2022-01-10 00:00:00 โ”† 2022 โ”† 1     โ”† 10  โ”† 0    โ”† 0      โ”† 0      โ”† 1641772800000000 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ–‡ๅญ—ๅˆ—ใธใฎๅค‰ๆ›ใฏ.dt.strftime()ใซใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆๆ–‡ๅญ—ๅˆ—ใ‚’ๆธกใ—ใพใ™ใ€‚

df_drange.select(
    pl.col("drange").dt.strftime("%Y/%m/%d %H:%M:%S").alias("str1"),
    pl.col("drange").dt.strftime("%d-%m-%Y %H:%M").alias("str2"),
)
# shape: (7, 2)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ str1                โ”† str2             โ”‚
# โ”‚ ---                 โ”† ---              โ”‚
# โ”‚ str                 โ”† str              โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2022/01/01 00:00:00 โ”† 01-01-2022 00:00 โ”‚
# โ”‚ 2022/01/02 12:00:00 โ”† 02-01-2022 12:00 โ”‚
# โ”‚ 2022/01/04 00:00:00 โ”† 04-01-2022 00:00 โ”‚
# โ”‚ 2022/01/05 12:00:00 โ”† 05-01-2022 12:00 โ”‚
# โ”‚ 2022/01/07 00:00:00 โ”† 07-01-2022 00:00 โ”‚
# โ”‚ 2022/01/08 12:00:00 โ”† 08-01-2022 12:00 โ”‚
# โ”‚ 2022/01/10 00:00:00 โ”† 10-01-2022 00:00 โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒชใ‚ตใƒณใƒ—ใƒชใƒณใ‚ฐ

polarsใงใฏ.group_by_dynamic()ใงๆ™‚็ณปๅˆ—ใซๅŸบใฅใ„ใŸใ‚ฐใƒซใƒผใƒ—้›†่จˆใ‚’่กŒใ„ใพใ™ใ€‚pandasใฎ.resample()ใซ็›ธๅฝ“ใ—ใพใ™ใ€‚

url = "https://raw.githubusercontent.com/nkmk/python-snippets/77f7a51e776077396fd8f8f8c1801d54e9854479/notebook/data/src/sample_date.csv"
df = pl.read_csv(url, schema_overrides={"date": pl.Date}).sort("date")
# shape: (12, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ date       โ”† val_1 โ”† val_2 โ”‚
# โ”‚ ---        โ”† ---   โ”† ---   โ”‚
# โ”‚ date       โ”† i64   โ”† i64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2017-11-01 โ”† 65    โ”† 76    โ”‚
# โ”‚ 2017-11-07 โ”† 26    โ”† 66    โ”‚
# โ”‚ 2017-11-18 โ”† 47    โ”† 47    โ”‚
# โ”‚ 2017-11-27 โ”† 20    โ”† 38    โ”‚
# โ”‚ 2017-12-05 โ”† 65    โ”† 85    โ”‚
# โ”‚ โ€ฆ          โ”† โ€ฆ     โ”† โ€ฆ     โ”‚
# โ”‚ 2017-12-29 โ”† 21    โ”† 8     โ”‚
# โ”‚ 2018-01-03 โ”† 98    โ”† 76    โ”‚
# โ”‚ 2018-01-08 โ”† 48    โ”† 64    โ”‚
# โ”‚ 2018-01-19 โ”† 18    โ”† 48    โ”‚
# โ”‚ 2018-01-23 โ”† 86    โ”† 70    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

.group_by_dynamic()ใฎ็ฌฌไธ€ๅผ•ๆ•ฐใซใ‚ญใƒผๅˆ—๏ผˆใ‚ฝใƒผใƒˆใ•ใ‚Œใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™๏ผ‰ใ€every=ๅผ•ๆ•ฐใซๆ™‚้–“้–“้š”ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

df.group_by_dynamic("date", every="1y").agg(pl.col("val_1", "val_2").sum())
# shape: (2, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ date       โ”† val_1 โ”† val_2 โ”‚
# โ”‚ ---        โ”† ---   โ”† ---   โ”‚
# โ”‚ date       โ”† i64   โ”† i64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2017-01-01 โ”† 279   โ”† 403   โ”‚
# โ”‚ 2018-01-01 โ”† 250   โ”† 258   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

df.group_by_dynamic("date", every="1mo").agg(pl.col("val_1", "val_2").sum())
# shape: (3, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ date       โ”† val_1 โ”† val_2 โ”‚
# โ”‚ ---        โ”† ---   โ”† ---   โ”‚
# โ”‚ date       โ”† i64   โ”† i64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2017-11-01 โ”† 158   โ”† 227   โ”‚
# โ”‚ 2017-12-01 โ”† 121   โ”† 176   โ”‚
# โ”‚ 2018-01-01 โ”† 250   โ”† 258   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

every=ๅผ•ๆ•ฐใฏๆ™‚้–“้–“้š”ใงใ™ใŒใ€period=ๅผ•ๆ•ฐใฏ้›†่จˆๅฏพ่ฑกใฎๆ™‚้–“ๆž ใฎ้•ทใ•ใงใ™ใ€‚every="1mo", period="15d"ใฏใ€15ๆ—ฅ้–“ใฎๅ€คใ‚’ๆœˆๆฏŽใซๅˆ่จˆใ™ใ‚‹ใจใ„ใ†ๆ„ๅ‘ณใซใชใ‚Šใพใ™ใ€‚

"""
month  11                        12                        01
day    01 02 03 ... 15 16 ... 30 01 02 03 ... 15 16 ... 31 01
every  -----------1mo----------> -----------1mo---------->
period |<====15d====>|           |<====15d====>|
"""
df.group_by_dynamic("date", every="1mo", period="15d").agg(
    pl.col("val_1", "val_2").sum()
)
# shape: (3, 3)
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ date       โ”† val_1 โ”† val_2 โ”‚
# โ”‚ ---        โ”† ---   โ”† ---   โ”‚
# โ”‚ date       โ”† i64   โ”† i64   โ”‚
# โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
# โ”‚ 2017-11-01 โ”† 91    โ”† 142   โ”‚
# โ”‚ 2017-12-01 โ”† 69    โ”† 114   โ”‚
# โ”‚ 2018-01-01 โ”† 146   โ”† 140   โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
447
420
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
447
420

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?