็ชๅฃๅฝๆฐ ๐๐ โ
็ชๅฃๅฝๆฐๆฏไธ็งๅผบๅคง็่กจ่พพๅผใๅฎๅฏไปฅ่ฎฉ็จๆทๅจ select
ไธไธๆไธญๅ็ป่ฟ่ก็ฑป่ใ ่ฎฉๆไปฌ้่ฟไพๅญ็็่ฟๆฏไปไนๆๆใ้ฆๅ
๏ผๆไปฌๅๅปบไธไธชๆฐๆฎ็ปๆ๏ผ่ฟไธชๆฐๆฎๅ
ๅซๅฆไธๅ๏ผๅๅซไปฃ่กจๅฃ่ขๅฆๆช็ไธไบไฟกๆฏ๏ผ
['#', 'Name', 'Type 1', 'Type 2', 'Total', 'HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Generation', 'Legendary']
import polars as pl
# ็ถๅ๏ผ่ฎฉๆไปฌๅ ่ฝฝไธไบๅ
pokemonไฟกๆฏ็csvๆฐๆฎ
df = pl.read_csv(
"https://gist.githubusercontent.com/ritchie46/cac6b337ea52281aa23c049250a4ff03/raw/89a957ff3919d90e6ef2d34235e6bf22304f3366/pokemon.csv"
)
print(df)
shape: (163, 13)
โโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโฌโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโ
โ # โ Name โ Type 1 โ Type 2 โ โฆ โ Sp. Def โ Speed โ Generation โ Legendary โ
โ --- โ --- โ --- โ --- โ โ --- โ --- โ --- โ --- โ
โ i64 โ str โ str โ str โ โ i64 โ i64 โ i64 โ bool โ
โโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโชโโโโโโโโโชโโโโชโโโโโโโโโโชโโโโโโโโชโโโโโโโโโโโโโชโโโโโโโโโโโโก
โ 1 โ Bulbasaur โ Grass โ Poison โ โฆ โ 65 โ 45 โ 1 โ false โ
โ 2 โ Ivysaur โ Grass โ Poison โ โฆ โ 80 โ 60 โ 1 โ false โ
โ 3 โ Venusaur โ Grass โ Poison โ โฆ โ 100 โ 80 โ 1 โ false โ
โ 3 โ VenusaurMega Venusaur โ Grass โ Poison โ โฆ โ 120 โ 80 โ 1 โ false โ
โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ
โ 147 โ Dratini โ Dragon โ null โ โฆ โ 50 โ 50 โ 1 โ false โ
โ 148 โ Dragonair โ Dragon โ null โ โฆ โ 70 โ 70 โ 1 โ false โ
โ 149 โ Dragonite โ Dragon โ Flying โ โฆ โ 100 โ 80 โ 1 โ false โ
โ 150 โ Mewtwo โ Psychic โ null โ โฆ โ 90 โ 130 โ 1 โ true โ
โโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโดโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโ
Groupby ็ฑป่ โ
ไธ้ขๆไปฌ็็ๅฆไฝ็จ็ชๅฃๅฝๆฐๅฏนไธๅ็ๅๅ็ปๅนถไธ็ฑป่ใ่ฟๆ ทๆไปฌๅฏไปฅๅจไธๆฌกๆฅ่ฏขไธญๅนถ่ก็่ฟ่กๅคไธชๅ็ปๆไฝใ ็ฑป่็็ปๆไผๆๅฐไผๅๆ็่กใๅ ๆญค๏ผ็ชๅฃๅฝๆฐๆฐธ่ฟ่ฟๅไธไธช่ทๅๆ DataFrame
ไธๆ ท่งๆ ผ็ DataFrame
ใ
ๆณจๆ๏ผๆไปฌไฝฟ็จไบ .over("Type 1")
ๅ .over(["Type 1", "Type 2"])
๏ผๅฉ็จ็ชๅฃๅฝๆฐๆไปฌๅฏไปฅไธไธช select
่ฏญๅขไธญๅฎ็ฐๅคไธชๅ็ป็ฑป่ใ
ๆดๅฅฝ็ๆฏ๏ผ่ฎก็ฎ่ฟ็ๅ็ปไผ่ขซ็ผๅญๅนถไธๅจไธๅ็็ชๅฃๅฝๆฐไธญๅ ฑไบซใ
import polars as pl
from .window_1 import df
out = df.select(
[
"Type 1",
"Type 2",
pl.col("Attack").mean().over("Type 1").alias("avg_attack_by_type"),
pl.col("Defense").mean().over(["Type 1", "Type 2"]).alias("avg_defense_by_type_combination"),
pl.col("Attack").mean().alias("avg_attack"),
]
)
print(out)
shape: (163, 5)
โโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ Type 1 โ Type 2 โ avg_attack_by_type โ avg_defense_by_type_combination โ avg_attack โ
โ --- โ --- โ --- โ --- โ --- โ
โ str โ str โ f64 โ f64 โ f64 โ
โโโโโโโโโโโชโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโก
โ Grass โ Poison โ 72.923077 โ 67.8 โ 75.349693 โ
โ Grass โ Poison โ 72.923077 โ 67.8 โ 75.349693 โ
โ Grass โ Poison โ 72.923077 โ 67.8 โ 75.349693 โ
โ Grass โ Poison โ 72.923077 โ 67.8 โ 75.349693 โ
โ โฆ โ โฆ โ โฆ โ โฆ โ โฆ โ
โ Dragon โ null โ 94.0 โ 55.0 โ 75.349693 โ
โ Dragon โ null โ 94.0 โ 55.0 โ 75.349693 โ
โ Dragon โ Flying โ 94.0 โ 95.0 โ 75.349693 โ
โ Psychic โ null โ 53.875 โ 51.428571 โ 75.349693 โ
โโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโ
ๅ็ปๆไฝ โ
็ชๅฃๅฝๆฐไธไป
ไป
ๅฏไปฅ็ฑป่๏ผ่ฟๅฏไปฅ็จๆฅๆ็
ง็ปๆฝๅ ่ชๅฎไนๅฝๆฐใไพๅฆ๏ผๅฆๆไฝ ๆณ่ฆๅจๆไธ็ปไธญๆๅบ๏ผไฝ ๅฏไปฅ๏ผ .col("value").sort().over("group")
ใ
่ฎฉๆไปฌ่ฏ็่ฟๆปคไธไบ่ก๏ผ
import polars as pl
from .window_1 import df
filtered = df.filter(pl.col("Type 2") == "Psychic").select(
[
"Name",
"Type 1",
"Speed",
]
)
print(filtered)
shape: (7, 3)
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโ
โ Name โ Type 1 โ Speed โ
โ --- โ --- โ --- โ
โ str โ str โ i64 โ
โโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโชโโโโโโโโก
โ Slowpoke โ Water โ 15 โ
โ Slowbro โ Water โ 30 โ
โ SlowbroMega Slowbro โ Water โ 30 โ
โ Exeggcute โ Grass โ 40 โ
โ Exeggutor โ Grass โ 55 โ
โ Starmie โ Water โ 115 โ
โ Jynx โ Ice โ 95 โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโ
ๆณจๆๅฐ๏ผๅ็ป Water
็ๅ Type 1
ๅนถไธ่ฟ็ปญ๏ผไธญ้ดๆไธค่ก Grass
ใ่ไธ๏ผๅ็ปไธญ็ๆฏไธไธชๅฃ่ขๅฆ่ก ่ขซๆ็
ง Speed
ๅๅบๆๅใไธๅนธ็ๆฏ๏ผ่ฟไธชไพๅญๆไปฌๅธๆ้ๅบๆๅ๏ผๅนธ่ฟ็ๆฏ๏ผ่ฟๅพ็ฎๅ๏ผ
import polars as pl
from .window_group_1 import filtered
out = filtered.with_columns(
[
pl.col(["Name", "Speed"]).sort(descending=True).over("Type 1"),
]
)
print(out)
shape: (7, 3)
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโ
โ Name โ Type 1 โ Speed โ
โ --- โ --- โ --- โ
โ str โ str โ i64 โ
โโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโชโโโโโโโโก
โ Starmie โ Water โ 115 โ
โ Slowpoke โ Water โ 30 โ
โ SlowbroMega Slowbro โ Water โ 30 โ
โ Exeggutor โ Grass โ 55 โ
โ Exeggcute โ Grass โ 40 โ
โ Slowbro โ Water โ 15 โ
โ Jynx โ Ice โ 95 โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโ
Polars
ไผ่ฟฝ่ธชๆฏไธช็ป็ไฝ็ฝฎ๏ผๅนถๆ็ธๅบ็่กจ่พพๅผๆ ๅฐๅฐ้ๅฝ็่กใ่ฟไธชๆไฝๅฏไปฅๅจไธไธช select ็ฏๅขไธญๅฎๆใ
็ชๅฃๅฝๆฐ็ๅผบๅคงไนๅคๅจไบ๏ผไฝ ้ๅธธไธ้่ฆ groupby -> explode
็ปๅ๏ผ่ๆฏๆ้ป่พๆพๅ
ฅไธไธช่กจ่พพๅผไธญใ ่ฟไนไฝฟๅพ API ๆดๅ ็ฎๆด๏ผ
groupby
-> ๆ ่ฎฐ็ฑป่็ๅ็ป๏ผ่ฟๅไธไธช่ท็ป็ไธชๆฐไธ่ด็DataFrame
over
-> ๆ ่ฎฐๆไปฌๅธๆๅฏน่ฟไธชๅ็ป่ฟ่ก่ฎก็ฎ๏ผไฝๆฏไธไผๆดๆนๅๆDataFrame
็ๅฝข็ถ
็ชๅฃ่กจ่พพๅผ็่งๅ โ
็ชๅฃ่กจ่พพๅผ็่ฎก็ฎ่งๅๅฆไธ๏ผๅ่ฎพๆไปฌๆไธไธช pl.Int32
ๅ๏ผ๏ผ
# ๅ็ปๅ
็ฑป่ไธๅนฟๆญ
# ่พๅบ็ฑปๅ: -> Int32
pl.sum("foo").over("groups")
# ็ปๅ
ๅ ๅ๏ผ็ถๅไนไปฅ็ปๅ
็ๅ
็ด
# ่พๅบ็ฑปๅ: -> Int32
(pl.col("x").sum() * pl.col("y")).over("groups")
# ็ปๅ
ๅ ๅ๏ผ็ถๅไนไปฅ็ปๅ
็ๅ
็ด
# ๅนถไธ็ปๅ
็ฑป่ๆไธไธชๅ่กจ
# ่พๅบ็ฑปๅ: -> List(Int32)
(pl.col("x").sum() * pl.col("y")).list().over("groups")
# ๆณจๆ่ฟ้้่ฆไธไธชๆพๅผ็ `list` ่ฐ็จ
# ็ปๅ
ๅ ๅ๏ผ็ถๅไนไปฅ็ปๅ
็ๅ
็ด
# ๅนถไธ็ปๅ
็ฑป่ๆไธไธชๅ่กจ
# list() ไผๅฑๅผ
# ๅฆๆ็ปๅ
ๆฏๆๅบ็๏ผ่ฟๆฏๆๅฟซ็ๆไฝๆนๆณ๏ผ
(pl.col("x").sum() * pl.col("y")).list().over("groups").flatten()
ๅฑๅผ็ชๅฃๅฝๆฐ โ
ๅฐฑๅๅๅ็ไพๅญ๏ผๅฆๆไฝ ็็ชๅฃๅฝๆฐ่ฟๅไธไธช list
๏ผ
pl.col("Name").sort_by(pl.col("Speed")).head(3).list().over("Type 1")
่ฟๆ ทๅฏไปฅ๏ผไฝๆฏ่ฟๆ ทไผ่ฟๅไธไธช็ฑปๅไธบ List
็ๅ๏ผ่ฟๅฏ่ฝไธๆฏๆไปฌๆณ่ฆ็๏ผ่ไธไผๅขๅ ๅ
ๅญไฝฟ็จใ
่ฟๆฏๆไปฌๅฏไปฅ้็จ flatten
ใ่ฟไธชๅฝๆฐไผๆไธไธช 2D ๅ่กจ่ฝฌๆขๆ 1D๏ผ็ถๅๆๅๆๅฐๅฐๆไปฌ็ DataFrame
ใ ่ฟไธชๆไฝ้ๅธธๅฟซ๏ผๅ ไธบ reshape ๅบๆฌๆฒกๆๆๆฌ๏ผ็ปๅๆ DataFrame
ๅขๅ ๅไน้ๅธธๅฟซ๏ผๅ ไธบๆไปฌไธ้่ฆ ไธ่ฌ็ชๅฃๅฝๆฐ็่ๅ๏ผJoin๏ผๆไฝใ
ไฝๆฏ๏ผๆณ่ฆๆญฃ็กฎ็ไฝฟ็จ่ฟไธชๆไฝ๏ผๆไปฌ่ฆไฟ่ฏ็จไบ over
็ๅๆฏๆๅบ็ใ