{"id":35752,"date":"2026-03-19T11:50:29","date_gmt":"2026-03-19T11:50:29","guid":{"rendered":"https:\/\/machinelearningplus.com\/uncategorized\/python-101-polars-exercises-python\/"},"modified":"2026-03-19T15:39:13","modified_gmt":"2026-03-19T15:39:13","slug":"101-polars-exercises-python","status":"publish","type":"post","link":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/","title":{"rendered":"101 Polars Exercises for Data Analysis (with Solutions)"},"content":{"rendered":"<p><em>Practice Polars \u2014 the blazing-fast DataFrame library for Python \u2014 with these 101 exercises ranging from beginner to advanced.<\/em><\/p>\n<p><em>This post has interactive code \u2014 click &#8216;Run&#8217; or press Ctrl+Enter on any code block to execute it directly in your browser. The first run may take a few seconds to initialize.<\/em><\/p>\n<style>\ndetails summary, details.blogv4-expand summary.blogv4-expand__toggle { cursor: pointer; color: #2563eb; text-decoration: underline; text-underline-offset: 3px; }\ndetails summary:hover, details.blogv4-expand summary.blogv4-expand__toggle:hover { color: #1d4ed8; }\n<\/style>\n<p>Polars is a lightning-fast DataFrame library written in Rust with a Python API. It is designed for performance and ergonomics, offering lazy evaluation, expressive syntax, and first-class support for parallel execution. These 101 exercises will help you master Polars through hands-on practice.<\/p>\n<p>The exercises are organized by increasing difficulty across topics like Series, DataFrames, filtering, groupby, joins, string operations, datetime handling, reshaping, and more.<\/p>\n<div style=\"background:#fff3cd;border:1px solid #ffc107;border-radius:8px;padding:16px;margin:16px 0\">\n<p><strong>Before you begin:<\/strong> Run the code block below to install Polars. This only needs to be done once per session.<\/p>\n<\/div>\n<pre class=\"python-runnable\">import polars as pl\nprint(\"Polars\", pl.__version__, \"ready!\")<\/pre>\n<p><strong>Difficulty Levels:<\/strong><\/p>\n<ul>\n<li><strong>L1<\/strong> \u2014 Beginner<\/li>\n<li><strong>L2<\/strong> \u2014 Intermediate<\/li>\n<li><strong>L3<\/strong> \u2014 Advanced<\/li>\n<\/ul>\n<h2 id=\"1-how-to-import-polars-and-check-the-version\">1. How to import polars and check the version?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Import polars and print the version installed.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\"># Task: Import polars and check the version\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>1.39.2\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nprint(pl.__version__)<\/pre>\n<\/details>\n<h2 id=\"2-how-to-create-a-series-from-a-list-numpy-array-and-dict\">2. How to create a Series from a list, numpy array, and dict?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Create a polars Series from each of the following: a list, a numpy array, and a dictionary (keys as name, values as data).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nmylist = list('abcedfghijklmnopqrstuvwxyz')\nmyarr = np.arange(26)\nmydict = dict(zip(mylist, myarr))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10,)\nSeries: 'values' [i32]\n[\n    0\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    9\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nmylist = list('abcedfghijklmnopqrstuvwxyz')\nmyarr = np.arange(26)\nmydict = dict(zip(mylist, myarr))\n\n# From list\nser1 = pl.Series(\"letters\", mylist)\n\n# From numpy array\nser2 = pl.Series(\"numbers\", myarr.tolist())\n\n# From dict (keys become a column, values become another)\nser3 = pl.Series(\"values\", list(mydict.values()))\nprint(ser1.head())\nprint(ser2.head())\nprint(ser3.head())<\/pre>\n<\/details>\n<h2 id=\"3-how-to-convert-a-series-into-a-dataframe-with-the-index-as-a-column\">3. How to convert a Series into a DataFrame with the index as a column?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Polars doesn&#8217;t have an index. Given a dictionary, create a two-column DataFrame with keys in one column and values in another.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nmylist = list('abcedfghijklmnopqrstuvwxyz')\nmyarr = np.arange(26)\nmydict = dict(zip(mylist, myarr))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 key \u2506 value \u2502\n\u2502 --- \u2506 ---   \u2502\n\u2502 str \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 a   \u2506 0     \u2502\n\u2502 b   \u2506 1     \u2502\n\u2502 c   \u2506 2     \u2502\n\u2502 e   \u2506 3     \u2502\n\u2502 d   \u2506 4     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nmylist = list('abcedfghijklmnopqrstuvwxyz')\nmyarr = np.arange(26)\nmydict = dict(zip(mylist, myarr))\n\ndf = pl.DataFrame({\"key\": list(mydict.keys()), \"value\": list(mydict.values())})\nprint(df.head())<\/pre>\n<\/details>\n<h2 id=\"4-how-to-combine-many-series-to-form-a-dataframe\">4. How to combine many Series to form a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Combine <code>ser1<\/code> and <code>ser2<\/code> to form a DataFrame.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nser1 = pl.Series(\"col1\", list('abcedfghijklmnopqrstuvwxyz'))\nser2 = pl.Series(\"col2\", np.arange(26).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 col1 \u2506 col2 \u2502\n\u2502 ---  \u2506 ---  \u2502\n\u2502 str  \u2506 i32  \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 a    \u2506 0    \u2502\n\u2502 b    \u2506 1    \u2502\n\u2502 c    \u2506 2    \u2502\n\u2502 e    \u2506 3    \u2502\n\u2502 d    \u2506 4    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nser1 = pl.Series(\"col1\", list('abcedfghijklmnopqrstuvwxyz'))\nser2 = pl.Series(\"col2\", np.arange(26).tolist())\n\ndf = pl.DataFrame([ser1, ser2])\nprint(df.head())<\/pre>\n<\/details>\n<h2 id=\"5-how-to-assign-a-name-to-a-series\">5. How to assign a name to a Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Give a name <code>'alphabets'<\/code> to the series <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(list('abcedfghijklmnopqrstuvwxyz'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10,)\nSeries: 'alphabets' [str]\n[\n    &quot;a&quot;\n    &quot;b&quot;\n    &quot;c&quot;\n    &quot;e&quot;\n    &quot;d&quot;\n    &quot;f&quot;\n    &quot;g&quot;\n    &quot;h&quot;\n    &quot;i&quot;\n    &quot;j&quot;\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(list('abcedfghijklmnopqrstuvwxyz'))\n\nser = ser.alias(\"alphabets\")\nprint(ser.head())<\/pre>\n<\/details>\n<h2 id=\"6-how-to-get-the-items-of-series-a-not-present-in-series-b\">6. How to get the items of Series A not present in Series B?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>From <code>ser1<\/code>, remove items present in <code>ser2<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"a\", [1, 2, 3, 4, 5])\nser2 = pl.Series(\"b\", [4, 5, 6, 7, 8])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3,)\nSeries: 'a' [i64]\n[\n    1\n    2\n    3\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"a\", [1, 2, 3, 4, 5])\nser2 = pl.Series(\"b\", [4, 5, 6, 7, 8])\n\nresult = ser1.filter(~ser1.is_in(ser2))\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"7-how-to-get-the-items-not-common-to-both-series-a-and-series-b\">7. How to get the items not common to both Series A and Series B?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get all items of <code>ser1<\/code> and <code>ser2<\/code> not common to both.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"a\", [1, 2, 3, 4, 5])\nser2 = pl.Series(\"b\", [4, 5, 6, 7, 8])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6,)\nSeries: 'union' [i64]\n[\n    1\n    2\n    3\n    6\n    7\n    8\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nser1 = pl.Series(\"a\", [1, 2, 3, 4, 5])\nser2 = pl.Series(\"b\", [4, 5, 6, 7, 8])\n\nunion = pl.Series(\"union\", np.union1d(ser1, ser2).tolist())\nintersect = pl.Series(\"intersect\", np.intersect1d(ser1, ser2).tolist())\nresult = union.filter(~union.is_in(intersect))\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"8-how-to-get-the-minimum-25th-percentile-median-75th-and-max-of-a-numeric-series\">8. How to get the minimum, 25th percentile, median, 75th, and max of a numeric Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Compute the min, 25th percentile, median, 75th percentile, and max of <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.normal(10, 5, 25).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>[0.43, 7.19, 8.83, 12.48, 17.9]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.normal(10, 5, 25).tolist())\n\nresult = [\n    ser.min(),\n    ser.quantile(0.25),\n    ser.median(),\n    ser.quantile(0.75),\n    ser.max(),\n]\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"9-how-to-get-frequency-counts-of-unique-items-of-a-series\">9. How to get frequency counts of unique items of a Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Calculate the frequency counts of each unique value in <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"chars\", np.take(list('abcdefgh'), np.random.randint(8, size=30)))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 chars \u2506 count \u2502\n\u2502 ---   \u2506 ---   \u2502\n\u2502 str   \u2506 u32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 h     \u2506 6     \u2502\n\u2502 c     \u2506 5     \u2502\n\u2502 e     \u2506 5     \u2502\n\u2502 d     \u2506 4     \u2502\n\u2502 g     \u2506 4     \u2502\n\u2502 f     \u2506 3     \u2502\n\u2502 b     \u2506 3     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"chars\", np.take(list('abcdefgh'), np.random.randint(8, size=30)))\n\nprint(ser.value_counts().sort(\"count\", descending=True))<\/pre>\n<\/details>\n<h2 id=\"10-how-to-keep-only-the-top-2-most-frequent-values-and-replace-everything-else-as-other\">10. How to keep only the top 2 most frequent values and replace everything else as &#8216;Other&#8217;?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>ser<\/code>, keep the top 2 most frequent values as-is. Replace all other values with <code>'Other'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\nser = pl.Series(\"data\", np.random.randint(1, 5, [12]).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (12, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 data  \u2502\n\u2502 ---   \u2502\n\u2502 str   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 1     \u2502\n\u2502 1     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 \u2026     \u2502\n\u2502 Other \u2502\n\u2502 Other \u2502\n\u2502 1     \u2502\n\u2502 Other \u2502\n\u2502 Other \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\nser = pl.Series(\"data\", np.random.randint(1, 5, [12]).tolist())\n\ncounts = ser.value_counts().sort(\"count\", descending=True)\ntop2 = counts.head(2)[\"data\"].to_list()\nresult = ser.cast(pl.String).to_frame(\"data\").with_columns(\n    pl.when(pl.col(\"data\").cast(pl.Int64).is_in(top2))\n    .then(pl.col(\"data\"))\n    .otherwise(pl.lit(\"Other\"))\n    .alias(\"data\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"11-how-to-bin-a-numeric-series-to-10-groups-of-equal-size\">11. How to bin a numeric Series to 10 groups of equal size?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Bin the series <code>ser<\/code> into 10 equal-sized decile groups and label them from 1st to 10th.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.random(20).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10,)\nSeries: 'data' [cat]\n[\n    &quot;4th&quot;\n    &quot;10th&quot;\n    &quot;8th&quot;\n    &quot;6th&quot;\n    &quot;2nd&quot;\n    &quot;2nd&quot;\n    &quot;1st&quot;\n    &quot;9th&quot;\n    &quot;7th&quot;\n    &quot;8th&quot;\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.random(20).tolist())\n\nlabels = ['1st','2nd','3rd','4th','5th','6th','7th','8th','9th','10th']\nbreakpoints = [i \/ 10 for i in range(11)]\n\nresult = ser.cut(breakpoints[1:-1], labels=labels)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"12-how-to-convert-a-numpy-array-to-a-dataframe-of-given-shape\">12. How to convert a numpy array to a DataFrame of given shape?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Reshape the series <code>ser<\/code> into a DataFrame with 7 rows and 5 columns.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.randint(1, 10, 35).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 col0 \u2506 col1 \u2506 col2 \u2506 col3 \u2506 col4 \u2502\n\u2502 ---  \u2506 ---  \u2506 ---  \u2506 ---  \u2506 ---  \u2502\n\u2502 i32  \u2506 i32  \u2506 i32  \u2506 i32  \u2506 i32  \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 7    \u2506 4    \u2506 8    \u2506 5    \u2506 7    \u2502\n\u2502 3    \u2506 7    \u2506 8    \u2506 5    \u2506 4    \u2502\n\u2502 8    \u2506 8    \u2506 3    \u2506 6    \u2506 5    \u2502\n\u2502 2    \u2506 8    \u2506 6    \u2506 2    \u2506 5    \u2502\n\u2502 1    \u2506 6    \u2506 9    \u2506 1    \u2506 3    \u2502\n\u2502 7    \u2506 4    \u2506 9    \u2506 3    \u2506 5    \u2502\n\u2502 3    \u2506 7    \u2506 5    \u2506 9    \u2506 7    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\narr = np.random.randint(1, 10, 35).reshape(7, 5)\n\ndf = pl.DataFrame(arr.tolist(), schema=[f\"col{i}\" for i in range(5)])\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"13-how-to-find-the-positions-of-numbers-that-are-multiples-of-3-from-a-series\">13. How to find the positions of numbers that are multiples of 3 from a Series?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find the positions of numbers that are multiples of 3 from <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.randint(1, 10, 7).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7,)\nSeries: 'data' [i32]\n[\n    7\n    4\n    8\n    5\n    7\n    3\n    7\n]\n[5]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.randint(1, 10, 7).tolist())\n\nprint(ser)\npositions = [i for i, v in enumerate(ser) if v % 3 == 0]\nprint(positions)<\/pre>\n<\/details>\n<h2 id=\"14-how-to-extract-items-at-given-positions-from-a-series\">14. How to extract items at given positions from a Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>From <code>ser<\/code>, extract the items at positions 0, 4, 8, and 14.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"letters\", list('abcdefghijklmnopqrstuvwxyz'))\npos = [0, 4, 8, 14]\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4,)\nSeries: 'letters' [str]\n[\n    &quot;a&quot;\n    &quot;e&quot;\n    &quot;i&quot;\n    &quot;o&quot;\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"letters\", list('abcdefghijklmnopqrstuvwxyz'))\npos = [0, 4, 8, 14]\n\nresult = ser.gather(pos)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"15-how-to-stack-two-series-vertically-and-horizontally\">15. How to stack two Series vertically and horizontally?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Stack <code>ser1<\/code> and <code>ser2<\/code> vertically and horizontally (to form a DataFrame).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"col1\", [0, 1, 2, 3, 4])\nser2 = pl.Series(\"col2\", [5, 6, 7, 8, 9])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10,)\nSeries: 'col1' [i64]\n[\n    0\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    9\n]\n\nshape: (5, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 col1 \u2506 col2 \u2502\n\u2502 ---  \u2506 ---  \u2502\n\u2502 i64  \u2506 i64  \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0    \u2506 5    \u2502\n\u2502 1    \u2506 6    \u2502\n\u2502 2    \u2506 7    \u2502\n\u2502 3    \u2506 8    \u2502\n\u2502 4    \u2506 9    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"col1\", [0, 1, 2, 3, 4])\nser2 = pl.Series(\"col2\", [5, 6, 7, 8, 9])\n\n# Vertical\nvertical = pl.concat([ser1, ser2])\nprint(vertical)\n\n# Horizontal\nhorizontal = pl.DataFrame([ser1, ser2])\nprint(horizontal)<\/pre>\n<\/details>\n<h2 id=\"16-how-to-get-the-positions-of-items-of-series-a-in-series-b\">16. How to get the positions of items of Series A in Series B?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the positions of items of <code>ser2<\/code> in <code>ser1<\/code> as a list.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"a\", [10, 9, 6, 5, 3, 1, 12, 8, 13])\nser2 = pl.Series(\"b\", [1, 3, 10, 13])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>[5, 4, 0, 8]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser1 = pl.Series(\"a\", [10, 9, 6, 5, 3, 1, 12, 8, 13])\nser2 = pl.Series(\"b\", [1, 3, 10, 13])\n\npositions = [ser1.to_list().index(val) for val in ser2.to_list()]\nprint(positions)<\/pre>\n<\/details>\n<h2 id=\"17-how-to-compute-the-mean-squared-error-between-a-truth-and-predicted-series\">17. How to compute the mean squared error between a truth and predicted Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Compute the mean squared error of <code>truth<\/code> and <code>pred<\/code> Series.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ntruth = pl.Series(\"truth\", np.arange(10).tolist())\npred = pl.Series(\"pred\", (np.arange(10) + np.random.random(10)).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>0.3603\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ntruth = pl.Series(\"truth\", np.arange(10).astype(float).tolist())\npred = pl.Series(\"pred\", (np.arange(10) + np.random.random(10)).tolist())\n\nmse = ((truth - pred) ** 2).mean()\nprint(mse)<\/pre>\n<\/details>\n<h2 id=\"18-how-to-convert-the-first-character-of-each-element-in-a-series-to-uppercase\">18. How to convert the first character of each element in a Series to uppercase?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Change the first character of each word to upper case in each word of <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['how', 'to', 'kick', 'ass?'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 words \u2502\n\u2502 ---   \u2502\n\u2502 str   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 How   \u2502\n\u2502 To    \u2502\n\u2502 Kick  \u2502\n\u2502 Ass?  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['how', 'to', 'kick', 'ass?'])\n\nresult = ser.to_frame(\"words\").with_columns(\n    pl.col(\"words\").str.to_titlecase().alias(\"words\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"19-how-to-calculate-the-number-of-characters-in-each-word-in-a-series\">19. How to calculate the number of characters in each word in a Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Calculate the number of characters in each word in <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['how', 'to', 'kick', 'ass?'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4,)\nSeries: 'words' [u32]\n[\n    3\n    2\n    4\n    4\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['how', 'to', 'kick', 'ass?'])\n\nresult = ser.str.len_chars()\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"20-how-to-compute-the-difference-of-differences-between-consecutive-numbers-of-a-series\">20. How to compute the difference of differences between consecutive numbers of a Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Compute the difference of differences between consecutive numbers of <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"data\", [1, 3, 6, 10, 15, 21, 27, 35])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6,)\nSeries: 'data' [i64]\n[\n    1\n    1\n    1\n    1\n    0\n    2\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"data\", [1, 3, 6, 10, 15, 21, 27, 35])\n\ndiff1 = ser.diff()\ndiff2 = diff1.diff()\nprint(diff2.drop_nulls())<\/pre>\n<\/details>\n<h2 id=\"21-how-to-convert-a-series-of-date-strings-to-a-datetime-type\">21. How to convert a Series of date strings to a datetime type?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Convert the <code>ser<\/code> to a datetime Series.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"dates\", ['01 Jan 2010', '02-02-2011', '20120303', '2013\/04\/04', '2014-05-05', '2015-06-06T12:20'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6,)\nSeries: 'dates' [datetime[\u03bcs]]\n[\n    2010-01-01 00:00:00\n    2011-02-02 00:00:00\n    2012-03-03 00:00:00\n    2013-04-04 00:00:00\n    2014-05-05 00:00:00\n    2015-06-06 12:20:00\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nfrom dateutil.parser import parse\n\nser = pl.Series(\"dates\", ['01 Jan 2010', '02-02-2011', '20120303', '2013\/04\/04', '2014-05-05', '2015-06-06T12:20'])\n\n# Use dateutil to parse mixed formats\nparsed = pl.Series(\"dates\", [parse(d) for d in ser.to_list()])\nprint(parsed)<\/pre>\n<\/details>\n<h2 id=\"22-how-to-get-the-day-of-month-week-number-day-of-year-and-day-of-week-from-a-datetime-series\">22. How to get the day of month, week number, day of year, and day of week from a datetime Series?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the day of month, week number, day of year, and day of week from <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nfrom dateutil.parser import parse\nser = pl.Series(\"dates\", [parse(d) for d in ['01 Jan 2010', '02-02-2011', '20120303', '2013\/04\/04', '2014-05-05', '2015-06-06T12:20']])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 dates               \u2506 day_of_month \u2506 week_number \u2506 day_of_year \u2506 day_of_week \u2502\n\u2502 ---                 \u2506 ---          \u2506 ---         \u2506 ---         \u2506 ---         \u2502\n\u2502 datetime[\u03bcs]        \u2506 i8           \u2506 i8          \u2506 i16         \u2506 i8          \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2010-01-01 00:00:00 \u2506 1            \u2506 53          \u2506 1           \u2506 5           \u2502\n\u2502 2011-02-02 00:00:00 \u2506 2            \u2506 5           \u2506 33          \u2506 3           \u2502\n\u2502 2012-03-03 00:00:00 \u2506 3            \u2506 9           \u2506 63          \u2506 6           \u2502\n\u2502 2013-04-04 00:00:00 \u2506 4            \u2506 14          \u2506 94          \u2506 4           \u2502\n\u2502 2014-05-05 00:00:00 \u2506 5            \u2506 19          \u2506 125         \u2506 1           \u2502\n\u2502 2015-06-06 12:20:00 \u2506 6            \u2506 23          \u2506 157         \u2506 6           \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nfrom dateutil.parser import parse\n\ndates = [parse(d) for d in ['01 Jan 2010', '02-02-2011', '20120303', '2013\/04\/04', '2014-05-05', '2015-06-06T12:20']]\nser = pl.Series(\"dates\", dates)\n\ndf = ser.to_frame(\"dates\").with_columns(\n    pl.col(\"dates\").dt.day().alias(\"day_of_month\"),\n    pl.col(\"dates\").dt.week().alias(\"week_number\"),\n    pl.col(\"dates\").dt.ordinal_day().alias(\"day_of_year\"),\n    pl.col(\"dates\").dt.weekday().alias(\"day_of_week\"),\n)\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"23-how-to-convert-year-month-string-to-dates-corresponding-to-the-4th-day-of-the-month\">23. How to convert year-month string to dates corresponding to the 4th day of the month?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Change <code>ser<\/code> to dates that start with the 4th of the respective months.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"dates\", ['Jan 2010', 'Feb 2011', 'Mar 2012'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3,)\nSeries: 'dates' [datetime[\u03bcs]]\n[\n    2010-01-04 00:00:00\n    2011-02-04 00:00:00\n    2012-03-04 00:00:00\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nfrom dateutil.parser import parse\n\nser = pl.Series(\"dates\", ['Jan 2010', 'Feb 2011', 'Mar 2012'])\n\nresult = pl.Series(\"dates\", [parse('04 ' + d) for d in ser.to_list()])\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"24-how-to-filter-words-that-contain-at-least-2-vowels-from-a-series\">24. How to filter words that contain at least 2 vowels from a Series?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>From <code>ser<\/code>, extract words that contain at least 2 vowels.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['Apple', 'Orange', 'Plan', 'Python', 'Money'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 words  \u2502\n\u2502 ---    \u2502\n\u2502 str    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Apple  \u2502\n\u2502 Orange \u2502\n\u2502 Money  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"words\", ['Apple', 'Orange', 'Plan', 'Python', 'Money'])\n\nresult = ser.to_frame(\"words\").filter(\n    pl.col(\"words\").str.count_matches(r\"[aeiouAEIOU]\") >= 2\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"25-how-to-filter-valid-emails-from-a-series\">25. How to filter valid emails from a Series?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Extract valid email addresses from <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nemails = pl.Series(\"emails\", ['buying books at amazom.com', 'rameses@egypt.com', 'matt@t.co', 'narendra@modi.com'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 emails            \u2502\n\u2502 ---               \u2502\n\u2502 str               \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 rameses@egypt.com \u2502\n\u2502 matt@t.co         \u2502\n\u2502 narendra@modi.com \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nemails = pl.Series(\"emails\", ['buying books at amazom.com', 'rameses@egypt.com', 'matt@t.co', 'narendra@modi.com'])\n\npattern = r'^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$'\nresult = emails.to_frame(\"emails\").filter(\n    pl.col(\"emails\").str.contains(pattern)\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"26-how-to-get-the-mean-of-a-series-grouped-by-another-series\">26. How to get the mean of a Series grouped by another Series?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Compute the mean of <code>weights<\/code> grouped by <code>fruit<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nfruit = pl.Series(\"fruit\", np.random.choice(['apple', 'banana', 'carrot'], 10).tolist())\nweights = pl.Series(\"weights\", np.linspace(1, 10, 10).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 fruit  \u2506 weights  \u2502\n\u2502 ---    \u2506 ---      \u2502\n\u2502 str    \u2506 f64      \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 apple  \u2506 4.333333 \u2502\n\u2502 banana \u2506 8.0      \u2502\n\u2502 carrot \u2506 5.666667 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nfruit = pl.Series(\"fruit\", np.random.choice(['apple', 'banana', 'carrot'], 10).tolist())\nweights = pl.Series(\"weights\", np.linspace(1, 10, 10).tolist())\n\ndf = pl.DataFrame([fruit, weights])\nprint(df.group_by(\"fruit\").agg(pl.col(\"weights\").mean()))<\/pre>\n<\/details>\n<h2 id=\"27-how-to-compute-the-euclidean-distance-between-two-series\">27. How to compute the euclidean distance between two Series?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Compute the euclidean distance between <code>p<\/code> and <code>q<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\np = pl.Series(\"p\", list(range(1, 11)))\nq = pl.Series(\"q\", list(range(10, 0, -1)))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>18.17\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\np = pl.Series(\"p\", list(range(1, 11)))\nq = pl.Series(\"q\", list(range(10, 0, -1)))\n\ndist = ((p - q) ** 2).sum() ** 0.5\nprint(dist)\n\n# Or using numpy\nprint(np.linalg.norm(p.to_numpy() - q.to_numpy()))<\/pre>\n<\/details>\n<h2 id=\"28-how-to-find-all-the-local-maxima-peaks-in-a-numeric-series\">28. How to find all the local maxima (peaks) in a numeric Series?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Get the positions of peaks (values surrounded by smaller values on both sides) in <code>ser<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"data\", [2, 10, 3, 4, 9, 10, 2, 7, 3])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>[1, 5, 7]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nser = pl.Series(\"data\", [2, 10, 3, 4, 9, 10, 2, 7, 3])\n\narr = ser.to_numpy()\n# A peak: value greater than both neighbors\npeaks = np.where((arr[1:-1] > arr[:-2]) & (arr[1:-1] > arr[2:]))[0] + 1\nprint(peaks.tolist())<\/pre>\n<\/details>\n<h2 id=\"29-how-to-replace-missing-spaces-in-a-string-with-the-least-frequent-character\">29. How to replace missing spaces in a string with the least frequent character?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Replace the spaces in <code>my_str<\/code> with whichever character is the least frequent, excluding spaces.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">my_str = 'dbc deb abed gade'\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Least frequent char: g\ndbcgdebgabedggade\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nmy_str = 'dbc deb abed gade'\n\nser = pl.Series(\"chars\", list(my_str))\ncounts = ser.filter(ser != ' ').value_counts().sort(\"count\")\nleast_freq = counts[0, 0]\nprint(my_str.replace(' ', least_freq))<\/pre>\n<\/details>\n<h2 id=\"30-how-to-create-a-timeseries-starting-2000-01-01-and-10-weekends-saturdays\">30. How to create a TimeSeries starting &#8216;2000-01-01&#8217; and 10 weekends (Saturdays)?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Create a Polars DataFrame with 10 Saturday dates starting from 2000-01-01 and random integer values.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 date       \u2506 value \u2502\n\u2502 ---        \u2506 ---   \u2502\n\u2502 date       \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2000-01-01 \u2506 7     \u2502\n\u2502 2000-01-08 \u2506 4     \u2502\n\u2502 2000-01-15 \u2506 8     \u2502\n\u2502 2000-01-22 \u2506 5     \u2502\n\u2502 2000-01-29 \u2506 7     \u2502\n\u2502 2000-02-05 \u2506 3     \u2502\n\u2502 2000-02-12 \u2506 7     \u2502\n\u2502 2000-02-19 \u2506 8     \u2502\n\u2502 2000-02-26 \u2506 5     \u2502\n\u2502 2000-03-04 \u2506 4     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nfrom datetime import date, timedelta\n\n# Find first Saturday on or after 2000-01-01\nstart = date(2000, 1, 1)\nwhile start.weekday() != 5:  # 5 = Saturday\n    start += timedelta(days=1)\n\nsaturdays = [start + timedelta(weeks=i) for i in range(10)]\ndf = pl.DataFrame({\n    \"date\": saturdays,\n    \"value\": np.random.randint(1, 10, 10).tolist()\n})\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"31-how-to-fill-missing-dates-and-forward-fill-values\">31. How to fill missing dates and forward-fill values?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p><code>ser<\/code> has missing dates. Fill in the missing dates and forward-fill the corresponding values.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nfrom datetime import date\ndf = pl.DataFrame({\n    \"date\": [date(2000,1,1), date(2000,1,3), date(2000,1,6), date(2000,1,8)],\n    \"value\": [1, 10, 3, None]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 date       \u2506 value \u2502\n\u2502 ---        \u2506 ---   \u2502\n\u2502 date       \u2506 i64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2000-01-01 \u2506 1     \u2502\n\u2502 2000-01-02 \u2506 1     \u2502\n\u2502 2000-01-03 \u2506 10    \u2502\n\u2502 2000-01-04 \u2506 10    \u2502\n\u2502 2000-01-05 \u2506 10    \u2502\n\u2502 2000-01-06 \u2506 3     \u2502\n\u2502 2000-01-07 \u2506 3     \u2502\n\u2502 2000-01-08 \u2506 3     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nfrom datetime import date\n\ndf = pl.DataFrame({\n    \"date\": [date(2000,1,1), date(2000,1,3), date(2000,1,6), date(2000,1,8)],\n    \"value\": [1, 10, 3, None]\n})\n\nall_dates = pl.DataFrame({\n    \"date\": pl.date_range(date(2000,1,1), date(2000,1,8), eager=True)\n})\nresult = all_dates.join(df, on=\"date\", how=\"left\").with_columns(\n    pl.col(\"value\").forward_fill()\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"32-how-to-find-the-autocorrelation-of-a-numeric-series\">32. How to find the autocorrelation of a numeric Series?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Compute autocorrelation for lags 1 through 10 of <code>ser<\/code>, and find the lag with the highest correlation.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", (np.arange(20) + np.random.normal(1, 10, 20)).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>[-0.04, -0.36, 0.24, -0.23, -0.06, 0.1, -0.59, -0.13, 0.33, -0.03]\nLag with highest correlation: 7\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", (np.arange(20) + np.random.normal(1, 10, 20)).tolist())\n\narr = ser.to_numpy()\nautocorrs = [np.corrcoef(arr[:-i], arr[i:])[0, 1] for i in range(1, 11)]\nprint([round(a, 2) for a in autocorrs])\nprint('Lag with highest correlation:', np.argmax(np.abs(autocorrs)) + 1)<\/pre>\n<\/details>\n<h2 id=\"33-how-to-import-only-specified-columns-from-a-csv-file\">33. How to import only specified columns from a CSV file?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Import &#8216;crim&#8217; and &#8216;medv&#8217; columns from the BostonHousing dataset CSV.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nurl = 'https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv'\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 crim    \u2506 medv \u2502\n\u2502 ---     \u2506 ---  \u2502\n\u2502 f64     \u2506 f64  \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.00632 \u2506 24.0 \u2502\n\u2502 0.02731 \u2506 21.6 \u2502\n\u2502 0.02729 \u2506 34.7 \u2502\n\u2502 0.03237 \u2506 33.4 \u2502\n\u2502 0.06905 \u2506 36.2 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\n\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv', columns=[\"crim\", \"medv\"])\nprint(df.head())<\/pre>\n<\/details>\n<h2 id=\"34-how-to-get-the-nrows-ncolumns-datatype-summary-stats-of-each-column-of-a-dataframe\">34. How to get the nrows, ncolumns, datatype, summary stats of each column of a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the number of rows, columns, datatypes, and summary stats of the Cars93 DataFrame.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Shape: (93, 27)\n\nColumn dtypes:\n  Manufacturer: String\n  Model: String\n  Type: String\n  Min.Price: Float64\n  Price: Float64\n  ...\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nprint(\"Shape:\", df.shape)\nprint(\"\\nDtypes:\\n\", df.dtypes)\nprint(\"\\nDescribe:\\n\", df.describe())<\/pre>\n<\/details>\n<h2 id=\"35-how-to-extract-the-row-and-column-number-of-a-particular-cell-with-given-criterion\">35. How to extract the row and column number of a particular cell with given criterion?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Which manufacturer, model, and type has the highest Price? What is the row and column number of the cell with the highest Price value?<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Row: 58\nColumn: 4\nMercedes-Benz 300E Midsize Price: 61.9\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Row with highest Price\nrow_idx = df[\"Price\"].arg_max()\nprint(\"Row:\", row_idx)\nprint(\"Column:\", df.columns.index(\"Price\"))\nprint(df[row_idx])<\/pre>\n<\/details>\n<h2 id=\"36-how-to-rename-a-specific-column-in-a-dataframe\">36. How to rename a specific column in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Rename the column <code>Type<\/code> to <code>CarType<\/code> in <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>['Manufacturer', 'Model', 'CarType', 'Min.Price', 'Price']\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\ndf = df.rename({\"Type\": \"CarType\"})\nprint(df.columns[:5])<\/pre>\n<\/details>\n<h2 id=\"37-how-to-check-if-a-dataframe-has-any-missing-values\">37. How to check if a DataFrame has any missing values?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Check if <code>df<\/code> has any missing values.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>True\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nhas_nulls = df.null_count().sum_horizontal()[0] > 0\nprint(has_nulls)<\/pre>\n<\/details>\n<h2 id=\"38-how-to-count-the-number-of-missing-values-in-each-column\">38. How to count the number of missing values in each column?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Count the number of missing values in each column of <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Manufacturer: 4\n  Price: 2\n  Type: 3\n  Min.Price: 7\n  Max.Price: 5\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nprint(df.null_count())<\/pre>\n<\/details>\n<h2 id=\"39-how-to-replace-missing-values-of-multiple-numeric-columns-with-the-mean\">39. How to replace missing values of multiple numeric columns with the mean?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Replace NaNs\/nulls with the column mean for all numeric columns in <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Numeric nulls before: 99, after: 0\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport polars.selectors as cs\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\ndf = df.with_columns(cs.numeric().fill_null(cs.numeric().mean()))\nprint(df.null_count())<\/pre>\n<\/details>\n<h2 id=\"40-how-to-use-apply-function-on-existing-columns-with-global-variables-as-additional-arguments\">40. How to use apply function on existing columns with global variables as additional arguments?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>df<\/code>, use polars expressions to compute a new column <code>'avg'<\/code> that is the row-mean of columns <code>'a'<\/code>, <code>'b'<\/code>, and <code>'c'<\/code>, then add a column <code>'avg_mf'<\/code> = <code>avg<\/code> \u00d7 <code>d<\/code> (where <code>d<\/code> is an external variable).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 10, 15).reshape(5, 3).tolist(), schema=['a', 'b', 'c'])\nd = 5\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2506 c   \u2506 avg      \u2506 avg_mf    \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2506 ---      \u2506 ---       \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2506 f64      \u2506 f64       \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 7   \u2506 4   \u2506 8   \u2506 6.333333 \u2506 31.666667 \u2502\n\u2502 5   \u2506 7   \u2506 3   \u2506 5.0      \u2506 25.0      \u2502\n\u2502 7   \u2506 8   \u2506 5   \u2506 6.666667 \u2506 33.333333 \u2502\n\u2502 4   \u2506 8   \u2506 8   \u2506 6.666667 \u2506 33.333333 \u2502\n\u2502 3   \u2506 6   \u2506 5   \u2506 4.666667 \u2506 23.333333 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 10, 15).reshape(5, 3).tolist(), schema=['a', 'b', 'c'])\nd = 5\n\ndf = df.with_columns(\n    ((pl.col(\"a\") + pl.col(\"b\") + pl.col(\"c\")) \/ 3).alias(\"avg\")\n).with_columns(\n    (pl.col(\"avg\") * d).alias(\"avg_mf\")\n)\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"41-how-to-swap-two-columns-in-a-dataframe\">41. How to swap two columns in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>df<\/code>, swap columns <code>'a'<\/code> and <code>'c'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\ndf = pl.DataFrame(np.arange(20).reshape(-1, 5).tolist(), schema=list('abcde'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 c   \u2506 b   \u2506 a   \u2506 d   \u2506 e   \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2   \u2506 1   \u2506 0   \u2506 3   \u2506 4   \u2502\n\u2502 7   \u2506 6   \u2506 5   \u2506 8   \u2506 9   \u2502\n\u2502 12  \u2506 11  \u2506 10  \u2506 13  \u2506 14  \u2502\n\u2502 17  \u2506 16  \u2506 15  \u2506 18  \u2506 19  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\ndf = pl.DataFrame(np.arange(20).reshape(-1, 5).tolist(), schema=list('abcde'))\n\n# Swap 'a' and 'c'\ncols = df.columns\na_idx, c_idx = cols.index('a'), cols.index('c')\ncols[a_idx], cols[c_idx] = cols[c_idx], cols[a_idx]\ndf = df.select(cols)\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"42-how-to-sort-columns-in-reverse-alphabetical-order\">42. How to sort columns in reverse alphabetical order?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Sort the columns of <code>df<\/code> in reverse alphabetical order.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\ndf = pl.DataFrame(np.arange(20).reshape(-1, 5).tolist(), schema=list('abcde'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 e   \u2506 d   \u2506 c   \u2506 b   \u2506 a   \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 4   \u2506 3   \u2506 2   \u2506 1   \u2506 0   \u2502\n\u2502 9   \u2506 8   \u2506 7   \u2506 6   \u2506 5   \u2502\n\u2502 14  \u2506 13  \u2506 12  \u2506 11  \u2506 10  \u2502\n\u2502 19  \u2506 18  \u2506 17  \u2506 16  \u2506 15  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\ndf = pl.DataFrame(np.arange(20).reshape(-1, 5).tolist(), schema=list('abcde'))\n\ndf = df.select(sorted(df.columns, reverse=True))\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"43-how-to-format-or-suppress-scientific-notations-in-a-polars-dataframe\">43. How to format or suppress scientific notations in a Polars DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>When displaying a DataFrame with very small numbers, format them as fixed-point with 4 decimal places.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame((np.random.random([5, 3]) \/ 1e3).tolist(), schema=['a', 'b', 'c'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a      \u2506 b      \u2506 c      \u2502\n\u2502 ---    \u2506 ---    \u2506 ---    \u2502\n\u2502 f64    \u2506 f64    \u2506 f64    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.0004 \u2506 0.0010 \u2506 0.0007 \u2502\n\u2502 0.0006 \u2506 0.0002 \u2506 0.0002 \u2502\n\u2502 0.0001 \u2506 0.0009 \u2506 0.0006 \u2502\n\u2502 0.0007 \u2506 0.0000 \u2506 0.0010 \u2502\n\u2502 0.0008 \u2506 0.0002 \u2506 0.0002 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame((np.random.random([5, 3]) \/ 1e3).tolist(), schema=['a', 'b', 'c'])\n\n# Polars uses Config for display settings\nwith pl.Config(float_precision=4):\n    print(df)<\/pre>\n<\/details>\n<h2 id=\"44-how-to-format-all-values-in-a-dataframe-to-show-only-4-decimal-places\">44. How to format all values in a DataFrame to show only 4 decimal places?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Show all float values in <code>df<\/code> rounded to 4 decimal places.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.random([5, 3]).tolist(), schema=['a', 'b', 'c'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a      \u2506 b      \u2506 c      \u2502\n\u2502 ---    \u2506 ---    \u2506 ---    \u2502\n\u2502 f64    \u2506 f64    \u2506 f64    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.3745 \u2506 0.9507 \u2506 0.732  \u2502\n\u2502 0.5987 \u2506 0.156  \u2506 0.156  \u2502\n\u2502 0.0581 \u2506 0.8662 \u2506 0.6011 \u2502\n\u2502 0.7081 \u2506 0.0206 \u2506 0.9699 \u2502\n\u2502 0.8324 \u2506 0.2123 \u2506 0.1818 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.random([5, 3]).tolist(), schema=['a', 'b', 'c'])\n\ndf = df.with_columns(pl.all().round(4))\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"45-how-to-filter-rows-of-a-dataframe-by-row-number\">45. How to filter rows of a DataFrame by row number?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Select every 20th row starting from the 1st row (row 0).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Manufacturer \u2506 Model   \u2506 Type    \u2502\n\u2502 ---          \u2506 ---     \u2506 ---     \u2502\n\u2502 str          \u2506 str     \u2506 str     \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Acura        \u2506 Integra \u2506 Small   \u2502\n\u2502 Chrysler     \u2506 LeBaron \u2506 Compact \u2502\n\u2502 Honda        \u2506 Prelude \u2506 Sporty  \u2502\n\u2502 Mercury      \u2506 Cougar  \u2506 Midsize \u2502\n\u2502 Subaru       \u2506 Loyale  \u2506 Small   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nresult = df.gather_every(20)\nprint(result.select([\"Manufacturer\", \"Model\", \"Type\"]))<\/pre>\n<\/details>\n<h2 id=\"46-how-to-create-a-primary-key-index-by-combining-relevant-columns\">46. How to create a primary key index by combining relevant columns?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>df<\/code>, replace nulls with <code>'missing'<\/code> in columns <code>'Manufacturer'<\/code>, <code>'Model'<\/code>, and <code>'Type'<\/code>, then create a new column <code>'primary_key'<\/code> as a combination of these three columns. Check if it is unique.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>True\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\ndf = df.with_columns(\n    pl.col(\"Manufacturer\").fill_null(\"missing\"),\n    pl.col(\"Model\").fill_null(\"missing\"),\n    pl.col(\"Type\").fill_null(\"missing\"),\n).with_columns(\n    (pl.col(\"Manufacturer\") + \"_\" + pl.col(\"Model\") + \"_\" + pl.col(\"Type\")).alias(\"primary_key\")\n)\nprint(df[\"primary_key\"].is_unique().all())<\/pre>\n<\/details>\n<h2 id=\"47-how-to-get-the-row-number-of-the-n-th-largest-value-in-a-column\">47. How to get the row number of the n-th largest value in a column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find the row position of the 5th largest value of column <code>'a'<\/code> in <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 30, 30).reshape(10, -1).tolist(), schema=list('abc'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>DataFrame:\nshape: (10, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2506 c   \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 7   \u2506 20  \u2506 29  \u2502\n\u2502 15  \u2506 11  \u2506 8   \u2502\n\u2502 29  \u2506 21  \u2506 7   \u2502\n\u2502 26  \u2506 19  \u2506 23  \u2502\n\u2502 11  \u2506 11  \u2506 24  \u2502\n\u2502 21  \u2506 4   \u2506 8   \u2502\n\u2502 24  \u2506 3   \u2506 22  \u2502\n\u2502 21  \u2506 2   \u2506 24  \u2502\n\u2502 12  \u2506 6   \u2506 2   \u2502\n\u2502 28  \u2506 21  \u2506 1   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n\nRow index of 5th largest value in 'a': 5\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 30, 30).reshape(10, -1).tolist(), schema=list('abc'))\n\nn = 5\nrow_idx = df.with_row_index(\"idx\").sort(\"a\", descending=True)[n - 1, \"idx\"]\nprint(row_idx)<\/pre>\n<\/details>\n<h2 id=\"48-how-to-find-the-position-of-the-n-th-largest-value-greater-than-the-mean\">48. How to find the position of the n-th largest value greater than the mean?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find the positions of values in <code>ser<\/code> that are greater than the mean. Report the 2nd position.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.randint(1, 100, 15).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Series: [52, 93, 15, 72, 61, 21, 83, 87, 75, 75, 88, 24, 3, 22, 53]\nMean: 55\n2nd position where value &gt; mean: 3\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\nser = pl.Series(\"data\", np.random.randint(1, 100, 15).tolist())\n\nmean_val = ser.mean()\npositions = [i for i, v in enumerate(ser) if v > mean_val]\nprint(\"Mean:\", round(mean_val))\nprint(\"2nd position where value > mean:\", positions[1])<\/pre>\n<\/details>\n<h2 id=\"49-how-to-get-the-last-two-rows-of-a-dataframe-whose-row-sum-100\">49. How to get the last two rows of a DataFrame whose row sum &gt; 100?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the last two rows of <code>df<\/code> where the sum of the row values exceeds 100.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(10, 40, 60).reshape(-1, 4).tolist(), schema=[f\"c{i}\" for i in range(4)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (2, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 c0  \u2506 c1  \u2506 c2  \u2506 c3  \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 24  \u2506 39  \u2506 39  \u2506 24  \u2502\n\u2502 39  \u2506 28  \u2506 21  \u2506 32  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(10, 40, 60).reshape(-1, 4).tolist(), schema=[f\"c{i}\" for i in range(4)])\n\nresult = df.filter(\n    pl.sum_horizontal(pl.all()) > 100\n).tail(2)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"50-how-to-find-and-cap-outliers-from-a-series-or-dataframe-column\">50. How to find and cap outliers from a Series or DataFrame column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Replace all values in <code>ser<\/code> that are above the 95th percentile or below the 5th percentile with the respective percentile value.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\nser = pl.Series(\"data\", np.random.normal(0, 1, 50).tolist())\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Low: -1.6906, High: 1.4707\nshape: (5, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 data      \u2502\n\u2502 ---       \u2502\n\u2502 f64       \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 -1.690617 \u2502\n\u2502 0.34268   \u2502\n\u2502 1.153036  \u2502\n\u2502 -0.252436 \u2502\n\u2502 0.981321  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\nser = pl.Series(\"data\", np.random.normal(0, 1, 50).tolist())\n\nlow = ser.quantile(0.05)\nhigh = ser.quantile(0.95)\n\nresult = ser.to_frame(\"data\").with_columns(\n    pl.col(\"data\").clip(low, high)\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"51-how-to-reshape-a-dataframe-from-long-to-wide-format\">51. How to reshape a DataFrame from long to wide format?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Pivot <code>df<\/code> so each unique <code>'car'<\/code> becomes a row and the columns are the cities with corresponding <code>'price'<\/code> values.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"car\": [\"Audi\", \"Audi\", \"BMW\", \"BMW\"],\n    \"city\": [\"SF\", \"NYC\", \"SF\", \"NYC\"],\n    \"price\": [45000, 42000, 55000, 52000]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (2, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 car  \u2506 SF    \u2506 NYC   \u2502\n\u2502 ---  \u2506 ---   \u2506 ---   \u2502\n\u2502 str  \u2506 i64   \u2506 i64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Audi \u2506 45000 \u2506 42000 \u2502\n\u2502 BMW  \u2506 55000 \u2506 52000 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"car\": [\"Audi\", \"Audi\", \"BMW\", \"BMW\"],\n    \"city\": [\"SF\", \"NYC\", \"SF\", \"NYC\"],\n    \"price\": [45000, 42000, 55000, 52000]\n})\n\nresult = df.pivot(on=\"city\", index=\"car\", values=\"price\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"52-how-to-reshape-a-dataframe-from-wide-to-long-format\">52. How to reshape a DataFrame from wide to long format?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Melt <code>df<\/code> so each car-city pair becomes a row.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"car\": [\"Audi\", \"BMW\"],\n    \"SF\": [45000, 55000],\n    \"NYC\": [42000, 52000]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 car  \u2506 city \u2506 price \u2502\n\u2502 ---  \u2506 ---  \u2506 ---   \u2502\n\u2502 str  \u2506 str  \u2506 i64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Audi \u2506 SF   \u2506 45000 \u2502\n\u2502 BMW  \u2506 SF   \u2506 55000 \u2502\n\u2502 Audi \u2506 NYC  \u2506 42000 \u2502\n\u2502 BMW  \u2506 NYC  \u2506 52000 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"car\": [\"Audi\", \"BMW\"],\n    \"SF\": [45000, 55000],\n    \"NYC\": [42000, 52000]\n})\n\nresult = df.unpivot(on=[\"SF\", \"NYC\"], index=\"car\", variable_name=\"city\", value_name=\"price\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"53-how-to-create-a-dataframe-with-rows-as-stacked-columns\">53. How to create a DataFrame with rows as stacked columns?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Create a DataFrame where each row is a column name &#8211; column value pair for the first row of <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 column       \u2506 value   \u2502\n\u2502 ---          \u2506 ---     \u2502\n\u2502 str          \u2506 str     \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Manufacturer \u2506 Acura   \u2502\n\u2502 Model        \u2506 Integra \u2502\n\u2502 Type         \u2506 Small   \u2502\n\u2502 Min.Price    \u2506 12.9    \u2502\n\u2502 Price        \u2506 15.9    \u2502\n\u2502 Max.Price    \u2506 18.8    \u2502\n\u2502 MPG.city     \u2506 25      \u2502\n\u2502 MPG.highway  \u2506 31      \u2502\n\u2502 AirBags      \u2506 None    \u2502\n\u2502 DriveTrain   \u2506 Front   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nfirst_row = df.head(1)\nresult = first_row.unpivot(variable_name=\"column\", value_name=\"value\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"54-how-to-check-if-a-dataframe-has-any-missing-values\">54. How to check if a DataFrame has any missing values?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Check which columns in <code>df<\/code> have any null values.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>['Manufacturer', 'Model', 'Type', 'Min.Price', 'Price', 'Max.Price', 'MPG.city', 'MPG.highway', 'AirBags', 'DriveTrain', 'Cylinders', 'EngineSize', 'Horsepower', 'RPM', 'Rev.per.mile', 'Man.trans.avail', 'Fuel.tank.capacity', 'Passengers', 'Length', 'Wheelbase', 'Width', 'Turn.circle', 'Rear.seat.room', 'Luggage.room', 'Weight', 'Origin', 'Make']\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nnull_counts = df.null_count()\ncols_with_nulls = [col for col in df.columns if null_counts[col][0] > 0]\nprint(cols_with_nulls)<\/pre>\n<\/details>\n<h2 id=\"55-how-to-get-the-minimum-value-in-each-column-grouped-by-another-column\">55. How to get the minimum value in each column grouped by another column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>df<\/code>, for each <code>'Type'<\/code>, get the minimum <code>'Price'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Type    \u2506 Price \u2502\n\u2502 ---     \u2506 ---   \u2502\n\u2502 str     \u2506 f64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 null    \u2506 8.6   \u2502\n\u2502 Compact \u2506 11.1  \u2502\n\u2502 Large   \u2506 18.4  \u2502\n\u2502 Midsize \u2506 13.9  \u2502\n\u2502 Small   \u2506 7.4   \u2502\n\u2502 Sporty  \u2506 12.5  \u2502\n\u2502 Van     \u2506 16.3  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nprint(df.group_by(\"Type\").agg(pl.col(\"Price\").min()))<\/pre>\n<\/details>\n<h2 id=\"56-how-to-get-the-top-n-rows-of-each-group-in-a-dataframe\">56. How to get the top n rows of each group in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>For each <code>'Type'<\/code>, get the top 2 rows with the highest <code>'Price'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Type    \u2506 Manufacturer  \u2506 Model    \u2506 Price \u2502\n\u2502 ---     \u2506 ---           \u2506 ---      \u2506 ---   \u2502\n\u2502 str     \u2506 str           \u2506 str      \u2506 f64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 null    \u2506 Pontiac       \u2506 Firebird \u2506 17.7  \u2502\n\u2502 null    \u2506 Hyundai       \u2506 Scoupe   \u2506 10.0  \u2502\n\u2502 Compact \u2506 Mercedes-Benz \u2506 190E     \u2506 31.9  \u2502\n\u2502 Compact \u2506 Audi          \u2506 90       \u2506 29.1  \u2502\n\u2502 Large   \u2506 Lincoln       \u2506 Town_Car \u2506 36.1  \u2502\n\u2502 Large   \u2506 Cadillac      \u2506 DeVille  \u2506 34.7  \u2502\n\u2502 Midsize \u2506 Toyota        \u2506 Camry    \u2506 null  \u2502\n\u2502 Midsize \u2506 Mercedes-Benz \u2506 300E     \u2506 61.9  \u2502\n\u2502 Small   \u2506 Saturn        \u2506 SL       \u2506 null  \u2502\n\u2502 Small   \u2506 Acura         \u2506 Integra  \u2506 15.9  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nresult = df.sort(\"Price\", descending=True).group_by(\"Type\").head(2)\nprint(result.select([\"Type\", \"Manufacturer\", \"Model\", \"Price\"]))<\/pre>\n<\/details>\n<h2 id=\"57-how-to-replace-missing-values-with-the-mode-of-a-column\">57. How to replace missing values with the mode of a column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Replace the missing values in <code>'DriveTrain'<\/code> column with its mode (most frequent value).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Mode: Front\nNulls after fill: 0\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nmode_val = df[\"DriveTrain\"].drop_nulls().value_counts().sort(\"count\", descending=True)[0, 0]\ndf = df.with_columns(pl.col(\"DriveTrain\").fill_null(mode_val))\nprint(df[\"DriveTrain\"].null_count())<\/pre>\n<\/details>\n<h2 id=\"58-how-to-create-a-new-column-from-existing-columns-using-a-condition\">58. How to create a new column from existing columns using a condition?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Create a new column <code>'price_category'<\/code> that says <code>'high'<\/code> if Price &gt; 30 else <code>'low'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Manufacturer \u2506 Price \u2506 price_category \u2502\n\u2502 ---          \u2506 ---   \u2506 ---            \u2502\n\u2502 str          \u2506 f64   \u2506 str            \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Acura        \u2506 15.9  \u2506 low            \u2502\n\u2502 null         \u2506 33.9  \u2506 high           \u2502\n\u2502 Audi         \u2506 29.1  \u2506 low            \u2502\n\u2502 Audi         \u2506 37.7  \u2506 high           \u2502\n\u2502 BMW          \u2506 30.0  \u2506 low            \u2502\n\u2502 Buick        \u2506 15.7  \u2506 low            \u2502\n\u2502 Buick        \u2506 20.8  \u2506 low            \u2502\n\u2502 Buick        \u2506 23.7  \u2506 low            \u2502\n\u2502 Buick        \u2506 26.3  \u2506 low            \u2502\n\u2502 Cadillac     \u2506 34.7  \u2506 high           \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\ndf = df.with_columns(\n    pl.when(pl.col(\"Price\") > 30)\n    .then(pl.lit(\"high\"))\n    .otherwise(pl.lit(\"low\"))\n    .alias(\"price_category\")\n)\nprint(df.select([\"Manufacturer\", \"Price\", \"price_category\"]).head(10))<\/pre>\n<\/details>\n<h2 id=\"59-how-to-get-the-column-wise-maximum-of-two-dataframes\">59. How to get the column-wise maximum of two DataFrames?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the element-wise maximum of two DataFrames <code>df1<\/code> and <code>df2<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\ndf1 = pl.DataFrame(np.random.randint(1, 25, [5, 3]), schema=list('abc'))\ndf2 = pl.DataFrame(np.random.randint(1, 25, [5, 3]), schema=list('abc'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2506 c   \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 17  \u2506 16  \u2506 8   \u2502\n\u2502 24  \u2506 17  \u2506 17  \u2502\n\u2502 23  \u2506 21  \u2506 13  \u2502\n\u2502 22  \u2506 3   \u2506 14  \u2502\n\u2502 22  \u2506 20  \u2506 18  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(100)\ndf1 = pl.DataFrame(np.random.randint(1, 25, [5, 3]), schema=list('abc'))\ndf2 = pl.DataFrame(np.random.randint(1, 25, [5, 3]), schema=list('abc'))\n\n# Rename df2 columns to avoid collision, then use max_horizontal\ndf2_renamed = df2.rename({c: f\"{c}_2\" for c in df2.columns})\ncombined = pl.concat([df1, df2_renamed], how=\"horizontal\")\nresult = combined.select(\n    [pl.max_horizontal(pl.col(c), pl.col(f\"{c}_2\")).alias(c) for c in df1.columns]\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"60-how-to-get-the-correlation-between-two-columns-of-a-dataframe\">60. How to get the correlation between two columns of a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Compute the correlation between all numeric columns in <code>df<\/code> and find the two columns with the highest absolute correlation.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Highest correlation: (c1, c8) = 0.8447\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Compute pairwise correlations using numpy\narr = df.to_numpy().astype(float)\ncorr_matrix = np.corrcoef(arr.T)\nnp.fill_diagonal(corr_matrix, 0)\nmax_idx = np.unravel_index(np.argmax(np.abs(corr_matrix)), corr_matrix.shape)\nprint(f\"Highest correlation: ({df.columns[max_idx[0]]}, {df.columns[max_idx[1]]}) = {corr_matrix[max_idx]:.4f}\")<\/pre>\n<\/details>\n<h2 id=\"61-how-to-create-a-column-containing-the-minimum-by-maximum-of-each-row\">61. How to create a column containing the minimum-by-maximum of each row?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Compute the minimum \/ maximum for every row of <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8,)\nSeries: 'min_by_max' [f64]\n[\n    0.16129\n    0.022727\n    0.230769\n    0.163043\n    0.041096\n    0.021739\n    0.098765\n    0.021505\n]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\nresult = df.with_columns(\n    (pl.min_horizontal(pl.all()) \/ pl.max_horizontal(pl.all())).alias(\"min_by_max\")\n)\nprint(result[\"min_by_max\"])<\/pre>\n<\/details>\n<h2 id=\"62-how-to-create-a-column-that-contains-the-penultimate-second-largest-value-in-each-row\">62. How to create a column that contains the penultimate (second largest) value in each row?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Create a new column <code>'penultimate'<\/code> which has the second largest value of each row.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 penultimate \u2502\n\u2502 ---         \u2502\n\u2502 i32         \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 87          \u2502\n\u2502 88          \u2502\n\u2502 89          \u2502\n\u2502 80          \u2502\n\u2502 64          \u2502\n\u2502 90          \u2502\n\u2502 78          \u2502\n\u2502 90          \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Use numpy on each row\narr = df.to_numpy()\npenultimate = [sorted(row)[-2] for row in arr]\ndf = df.with_columns(pl.Series(\"penultimate\", penultimate))\nprint(df.select([\"penultimate\"]))<\/pre>\n<\/details>\n<h2 id=\"63-how-to-normalize-all-columns-in-a-dataframe\">63. How to normalize all columns in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Normalize all columns of <code>df<\/code> so that the values in each column range from 0 to 1. (min-max scaling)<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 10)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 c0       \u2506 c1       \u2506 c2       \u2506 c3       \u2506 \u2026 \u2506 c6       \u2506 c7       \u2506 c8       \u2506 c9       \u2502\n\u2502 ---      \u2506 ---      \u2506 ---      \u2506 ---      \u2506   \u2506 ---      \u2506 ---      \u2506 ---      \u2506 ---      \u2502\n\u2502 f64      \u2506 f64      \u2506 f64      \u2506 f64      \u2506   \u2506 f64      \u2506 f64      \u2506 f64      \u2506 f64      \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.571429 \u2506 1.0      \u2506 0.134831 \u2506 1.0      \u2506 \u2026 \u2506 0.861111 \u2506 0.977011 \u2506 0.863636 \u2506 0.811111 \u2502\n\u2502 1.0      \u2506 0.241758 \u2506 0.0      \u2506 0.275362 \u2506 \u2026 \u2506 0.930556 \u2506 0.321839 \u2506 0.30303  \u2506 0.0      \u2502\n\u2502 0.714286 \u2506 0.637363 \u2506 0.202247 \u2506 0.434783 \u2506 \u2026 \u2506 0.013889 \u2506 1.0      \u2506 0.469697 \u2506 0.988889 \u2502\n\u2502 0.654762 \u2506 0.43956  \u2506 1.0      \u2506 0.826087 \u2506 \u2026 \u2506 0.569444 \u2506 0.689655 \u2506 0.439394 \u2506 0.666667 \u2502\n\u2502 0.559524 \u2506 0.582418 \u2506 0.685393 \u2506 0.0      \u2506 \u2026 \u2506 0.0      \u2506 0.816092 \u2506 0.318182 \u2506 0.177778 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\nresult = df.with_columns(\n    [(pl.col(c) - pl.col(c).min()) \/ (pl.col(c).max() - pl.col(c).min()) for c in df.columns]\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"64-how-to-compute-the-row-wise-softmax-of-a-dataframe\">64. How to compute the row-wise softmax of a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Compute the softmax of each row: e^x_i \/ sum(e^x) for each row.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 10)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 c0     \u2506 c1     \u2506 c2     \u2506 c3     \u2506 \u2026 \u2506 c6     \u2506 c7     \u2506 c8     \u2506 c9     \u2502\n\u2502 ---    \u2506 ---    \u2506 ---    \u2506 ---    \u2506   \u2506 ---    \u2506 ---    \u2506 ---    \u2506 ---    \u2502\n\u2502 f64    \u2506 f64    \u2506 f64    \u2506 f64    \u2506   \u2506 f64    \u2506 f64    \u2506 f64    \u2506 f64    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.0000 \u2506 0.9975 \u2506 0.0000 \u2506 0.0000 \u2506 \u2026 \u2506 0.0000 \u2506 0.0025 \u2506 0.0000 \u2506 0.0000 \u2502\n\u2502 0.5000 \u2506 0.0000 \u2506 0.0000 \u2506 0.0000 \u2506 \u2026 \u2506 0.5000 \u2506 0.0000 \u2506 0.0000 \u2506 0.0000 \u2502\n\u2502 0.0000 \u2506 0.0000 \u2506 0.0000 \u2506 0.0000 \u2506 \u2026 \u2506 0.0000 \u2506 0.1192 \u2506 0.0000 \u2506 0.8808 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\narr = df.to_numpy().astype(float)\nexp_arr = np.exp(arr - arr.max(axis=1, keepdims=True))  # for numerical stability\nsoftmax = exp_arr \/ exp_arr.sum(axis=1, keepdims=True)\nresult = pl.DataFrame(softmax.tolist(), schema=df.columns)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"65-how-to-find-the-maximum-range-max-min-column-in-a-dataframe\">65. How to find the maximum range (max &#8211; min) column in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find the column with the maximum range (max &#8211; min) in <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Ranges: {'c1': 91, 'c9': 90, 'c2': 89}\nColumn with max range: c1\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 80).reshape(8, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\nranges = {c: df[c].max() - df[c].min() for c in df.columns}\nprint(\"Column with max range:\", max(ranges, key=ranges.get))<\/pre>\n<\/details>\n<h2 id=\"66-how-to-replace-both-diagonals-of-a-dataframe-with-0\">66. How to replace both diagonals of a DataFrame with 0?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Replace both the main and anti-diagonal of <code>df<\/code> with 0.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 100).reshape(10, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 10)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 c0  \u2506 c1  \u2506 c2  \u2506 c3  \u2506 \u2026 \u2506 c6  \u2506 c7  \u2506 c8  \u2506 c9  \u2502\n\u2502 --- \u2506 --- \u2506 --- \u2506 --- \u2506   \u2506 --- \u2506 --- \u2506 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2506   \u2506 i32 \u2506 i32 \u2506 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0   \u2506 93  \u2506 15  \u2506 72  \u2506 \u2026 \u2506 83  \u2506 87  \u2506 75  \u2506 0   \u2502\n\u2502 88  \u2506 0   \u2506 3   \u2506 22  \u2506 \u2026 \u2506 88  \u2506 30  \u2506 0   \u2506 2   \u2502\n\u2502 64  \u2506 60  \u2506 0   \u2506 33  \u2506 \u2026 \u2506 22  \u2506 0   \u2506 49  \u2506 91  \u2502\n\u2502 59  \u2506 42  \u2506 92  \u2506 0   \u2506 \u2026 \u2506 0   \u2506 62  \u2506 47  \u2506 62  \u2502\n\u2502 51  \u2506 55  \u2506 64  \u2506 3   \u2506 \u2026 \u2506 21  \u2506 73  \u2506 39  \u2506 18  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 100, 100).reshape(10, -1).tolist(), schema=[f'c{i}' for i in range(10)])\n\narr = df.to_numpy().copy()\nnp.fill_diagonal(arr, 0)\nnp.fill_diagonal(np.fliplr(arr), 0)\nresult = pl.DataFrame(arr.tolist(), schema=df.columns)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"67-how-to-get-a-particular-group-of-a-group_by-dataframe-by-key\">67. How to get a particular group of a group_by DataFrame by key?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>From <code>df<\/code> grouped by <code>'col1'<\/code>, get the group belonging to <code>'apple'<\/code> as a DataFrame.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'col1': ['apple', 'banana', 'orange'] * 3,\n    'col2': np.random.rand(9).tolist(),\n    'col3': np.random.randint(0, 15, 9).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 col1  \u2506 col2     \u2506 col3 \u2502\n\u2502 ---   \u2506 ---      \u2506 ---  \u2502\n\u2502 str   \u2506 f64      \u2506 i32  \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 apple \u2506 0.37454  \u2506 7    \u2502\n\u2502 apple \u2506 0.598658 \u2506 4    \u2502\n\u2502 apple \u2506 0.058084 \u2506 11   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'col1': ['apple', 'banana', 'orange'] * 3,\n    'col2': np.random.rand(9).tolist(),\n    'col3': np.random.randint(0, 15, 9).tolist()\n})\n\nresult = df.filter(pl.col(\"col1\") == \"apple\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"68-how-to-get-the-n-th-largest-value-of-a-column-when-grouped-by-another-column\">68. How to get the n-th largest value of a column when grouped by another column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>In <code>df<\/code>, find the second largest value of <code>'taste'<\/code> for <code>'banana'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange', 'apple', 'banana', 'orange', 'apple', 'banana', 'orange'],\n    'taste': np.random.rand(9).tolist(),\n    'price': np.random.randint(1, 15, 9).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>2nd largest taste for banana: 0.8662\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange', 'apple', 'banana', 'orange', 'apple', 'banana', 'orange'],\n    'taste': np.random.rand(9).tolist(),\n    'price': np.random.randint(1, 15, 9).tolist()\n})\n\nresult = (\n    df.filter(pl.col(\"fruit\") == \"banana\")\n    .sort(\"taste\", descending=True)\n    [1, \"taste\"]  # 2nd largest (index 1)\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"69-how-to-compute-grouped-mean-and-keep-the-grouped-column-as-another-column-not-index\">69. How to compute grouped mean and keep the grouped column as another column (not index)?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Compute the grouped mean of <code>'price'<\/code> by <code>'fruit'<\/code> and keep <code>'fruit'<\/code> as a regular column.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'] * 3,\n    'taste': np.random.rand(9).tolist(),\n    'price': np.random.randint(1, 15, 9).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 fruit  \u2506 price    \u2502\n\u2502 ---    \u2506 ---      \u2502\n\u2502 str    \u2506 f64      \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 apple  \u2506 8.333333 \u2502\n\u2502 banana \u2506 6.333333 \u2502\n\u2502 orange \u2506 6.666667 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'] * 3,\n    'taste': np.random.rand(9).tolist(),\n    'price': np.random.randint(1, 15, 9).tolist()\n})\n\n# In Polars, group_by always keeps the grouped column as a column (no index)\nresult = df.group_by(\"fruit\").agg(pl.col(\"price\").mean())\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"70-how-to-join-two-dataframes-by-2-columns-so-they-have-only-the-common-rows\">70. How to join two DataFrames by 2 columns so they have only the common rows?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Join <code>df1<\/code> and <code>df2<\/code> on <code>'fruit'<\/code> and <code>'weight'<\/code> so only matching rows remain.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf1 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'],\n    'weight': ['high', 'medium', 'low'],\n    'price': np.random.randint(0, 15, 3).tolist()\n})\ndf2 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'melon'],\n    'weight': ['high', 'medium', 'high'],\n    'taste': np.random.randint(0, 15, 3).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (2, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 fruit  \u2506 weight \u2506 price \u2506 taste \u2502\n\u2502 ---    \u2506 ---    \u2506 ---   \u2506 ---   \u2502\n\u2502 str    \u2506 str    \u2506 i32   \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 apple  \u2506 high   \u2506 6     \u2506 14    \u2502\n\u2502 banana \u2506 medium \u2506 3     \u2506 10    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf1 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'],\n    'weight': ['high', 'medium', 'low'],\n    'price': np.random.randint(0, 15, 3).tolist()\n})\ndf2 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'melon'],\n    'weight': ['high', 'medium', 'high'],\n    'taste': np.random.randint(0, 15, 3).tolist()\n})\n\nresult = df1.join(df2, on=[\"fruit\", \"weight\"], how=\"inner\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"71-how-to-remove-rows-from-a-dataframe-that-are-present-in-another-dataframe\">71. How to remove rows from a DataFrame that are present in another DataFrame?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Remove rows from <code>df1<\/code> that are present in <code>df2<\/code>, based on the <code>'fruit'<\/code> column.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf1 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'],\n    'weight': ['high', 'medium', 'low'],\n    'price': np.random.randint(0, 15, 3).tolist()\n})\ndf2 = pl.DataFrame({\n    'fruit': ['apple', 'melon', 'banana'],\n    'weight': ['high', 'high', 'low'],\n    'taste': np.random.randint(0, 15, 3).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (1, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 fruit  \u2506 weight \u2506 price \u2502\n\u2502 ---    \u2506 ---    \u2506 ---   \u2502\n\u2502 str    \u2506 str    \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 orange \u2506 low    \u2506 12    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf1 = pl.DataFrame({\n    'fruit': ['apple', 'banana', 'orange'],\n    'weight': ['high', 'medium', 'low'],\n    'price': np.random.randint(0, 15, 3).tolist()\n})\ndf2 = pl.DataFrame({\n    'fruit': ['apple', 'melon', 'banana'],\n    'weight': ['high', 'high', 'low'],\n    'taste': np.random.randint(0, 15, 3).tolist()\n})\n\nresult = df1.filter(~pl.col(\"fruit\").is_in(df2[\"fruit\"]))\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"72-how-to-get-the-positions-where-values-of-two-columns-match\">72. How to get the positions where values of two columns match?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Get the row positions where the values of columns <code>'a'<\/code> and <code>'b'<\/code> are equal.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'a': np.random.choice([1, 2, 3, 4], 10).tolist(),\n    'b': np.random.choice([1, 2, 3, 4], 10).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2502\n\u2502 --- \u2506 --- \u2502\n\u2502 i32 \u2506 i32 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 3   \u2506 3   \u2502\n\u2502 4   \u2506 3   \u2502\n\u2502 1   \u2506 3   \u2502\n\u2502 3   \u2506 3   \u2502\n\u2502 3   \u2506 4   \u2502\n\u2502 4   \u2506 1   \u2502\n\u2502 1   \u2506 4   \u2502\n\u2502 1   \u2506 4   \u2502\n\u2502 3   \u2506 4   \u2502\n\u2502 2   \u2506 3   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\nPositions where a == b: [0, 3]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'a': np.random.choice([1, 2, 3, 4], 10).tolist(),\n    'b': np.random.choice([1, 2, 3, 4], 10).tolist()\n})\n\npositions = df.with_row_index(\"idx\").filter(pl.col(\"a\") == pl.col(\"b\"))[\"idx\"].to_list()\nprint(positions)<\/pre>\n<\/details>\n<h2 id=\"73-how-to-create-lags-and-leads-of-a-column-in-a-dataframe\">73. How to create lags and leads of a column in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Create columns for lag1 (shifted down by 1) and lead1 (shifted up by 1) of column <code>'a'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'a': np.arange(1, 11).tolist(),\n    'b': np.random.randint(10, 30, 10).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2506 lag1 \u2506 lead1 \u2502\n\u2502 --- \u2506 --- \u2506 ---  \u2506 ---   \u2502\n\u2502 i32 \u2506 i32 \u2506 i32  \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 1   \u2506 16  \u2506 null \u2506 2     \u2502\n\u2502 2   \u2506 29  \u2506 1    \u2506 3     \u2502\n\u2502 3   \u2506 24  \u2506 2    \u2506 4     \u2502\n\u2502 4   \u2506 20  \u2506 3    \u2506 5     \u2502\n\u2502 5   \u2506 17  \u2506 4    \u2506 6     \u2502\n\u2502 6   \u2506 16  \u2506 5    \u2506 7     \u2502\n\u2502 7   \u2506 28  \u2506 6    \u2506 8     \u2502\n\u2502 8   \u2506 20  \u2506 7    \u2506 9     \u2502\n\u2502 9   \u2506 20  \u2506 8    \u2506 10    \u2502\n\u2502 10  \u2506 13  \u2506 9    \u2506 null  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'a': np.arange(1, 11).tolist(),\n    'b': np.random.randint(10, 30, 10).tolist()\n})\n\ndf = df.with_columns(\n    pl.col(\"a\").shift(1).alias(\"lag1\"),\n    pl.col(\"a\").shift(-1).alias(\"lead1\"),\n)\nprint(df)<\/pre>\n<\/details>\n<h2 id=\"74-how-to-get-the-frequency-of-unique-values-in-the-entire-dataframe\">74. How to get the frequency of unique values in the entire DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Get the frequency of unique values across the entire DataFrame <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 10, 20).reshape(4, 5).tolist(), schema=list('abcde'))\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 count \u2502\n\u2502 --- \u2506 ---   \u2502\n\u2502 i64 \u2506 u32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 8   \u2506 5     \u2502\n\u2502 5   \u2506 4     \u2502\n\u2502 7   \u2506 3     \u2502\n\u2502 4   \u2506 2     \u2502\n\u2502 6   \u2506 2     \u2502\n\u2502 2   \u2506 2     \u2502\n\u2502 3   \u2506 2     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(1, 10, 20).reshape(4, 5).tolist(), schema=list('abcde'))\n\n# Flatten all values and count\nall_values = pl.concat([df[c].cast(pl.Int64) for c in df.columns])\nprint(all_values.value_counts().sort(\"count\", descending=True))<\/pre>\n<\/details>\n<h2 id=\"75-how-to-split-a-text-column-into-two-separate-columns\">75. How to split a text column into two separate columns?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Split the string column in <code>df<\/code> to form a DataFrame with 3 columns.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"row\": [\n        \"STD, City\\tState\",\n        \"33, Kolkata\\tWest Bengal\",\n        \"44, Chennai\\tTamil Nadu\",\n        \"40, Hyderabad\\tTelengana\",\n        \"80, Bangalore\\tKarnataka\"\n    ]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 STD \u2506 City      \u2506 State       \u2502\n\u2502 --- \u2506 ---       \u2506 ---         \u2502\n\u2502 str \u2506 str       \u2506 str         \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 33  \u2506 Kolkata   \u2506 West Bengal \u2502\n\u2502 44  \u2506 Chennai   \u2506 Tamil Nadu  \u2502\n\u2502 40  \u2506 Hyderabad \u2506 Telengana   \u2502\n\u2502 80  \u2506 Bangalore \u2506 Karnataka   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    \"row\": [\n        \"STD, City\\tState\",\n        \"33, Kolkata\\tWest Bengal\",\n        \"44, Chennai\\tTamil Nadu\",\n        \"40, Hyderabad\\tTelengana\",\n        \"80, Bangalore\\tKarnataka\"\n    ]\n})\n\n# Split by comma+space to get STD and rest\nsplit1 = df[\"row\"].str.split(\", \")\ndf2 = pl.DataFrame({\n    \"first\": split1.list.get(0),\n    \"rest\": split1.list.get(1),\n})\n\n# Split rest by tab\nsplit2 = df2[\"rest\"].str.split(\"\\t\")\nresult = pl.DataFrame({\n    \"STD\": df2[\"first\"],\n    \"City\": split2.list.get(0),\n    \"State\": split2.list.get(1),\n})\n\n# Use first row as header and skip it\nheader = result.row(0)\nresult = result.slice(1).rename(dict(zip(result.columns, header)))\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"76-how-to-rank-items-within-each-group\">76. How to rank items within each group?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>For each store, rank the months by revenue (highest = rank 1). Use a window function.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'store': ['A','A','A','B','B','B','C','C','C'],\n    'month': ['Jan','Feb','Mar','Jan','Feb','Mar','Jan','Feb','Mar'],\n    'revenue': np.random.randint(100, 500, 9).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (9, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 store \u2506 month \u2506 revenue \u2506 rank_in_store \u2502\n\u2502 ---   \u2506 ---   \u2506 ---     \u2506 ---           \u2502\n\u2502 str   \u2506 str   \u2506 i32     \u2506 i32           \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 A     \u2506 Jan   \u2506 202     \u2506 3             \u2502\n\u2502 A     \u2506 Feb   \u2506 448     \u2506 1             \u2502\n\u2502 A     \u2506 Mar   \u2506 370     \u2506 2             \u2502\n\u2502 B     \u2506 Jan   \u2506 206     \u2506 2             \u2502\n\u2502 B     \u2506 Feb   \u2506 171     \u2506 3             \u2502\n\u2502 B     \u2506 Mar   \u2506 288     \u2506 1             \u2502\n\u2502 C     \u2506 Jan   \u2506 120     \u2506 3             \u2502\n\u2502 C     \u2506 Feb   \u2506 202     \u2506 2             \u2502\n\u2502 C     \u2506 Mar   \u2506 221     \u2506 1             \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'store': ['A','A','A','B','B','B','C','C','C'],\n    'month': ['Jan','Feb','Mar','Jan','Feb','Mar','Jan','Feb','Mar'],\n    'revenue': np.random.randint(100, 500, 9).tolist()\n})\n\nresult = df.with_columns(\n    pl.col(\"revenue\").rank(descending=True).over(\"store\").cast(pl.Int32).alias(\"rank_in_store\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"77-how-to-compute-the-running-difference-within-groups\">77. How to compute the running difference within groups?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>For each user, compute the day-over-day change in <code>logins<\/code> using <code>diff()<\/code> within groups.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'user': ['A','A','A','A','B','B','B','B'],\n    'day': [1,2,3,4,1,2,3,4],\n    'logins': np.random.randint(1, 20, 8).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 user \u2506 day \u2506 logins \u2506 daily_change \u2502\n\u2502 ---  \u2506 --- \u2506 ---    \u2506 ---          \u2502\n\u2502 str  \u2506 i64 \u2506 i32    \u2506 i32          \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 A    \u2506 1   \u2506 7      \u2506 null         \u2502\n\u2502 A    \u2506 2   \u2506 15     \u2506 8            \u2502\n\u2502 A    \u2506 3   \u2506 11     \u2506 -4           \u2502\n\u2502 A    \u2506 4   \u2506 8      \u2506 -3           \u2502\n\u2502 B    \u2506 1   \u2506 7      \u2506 null         \u2502\n\u2502 B    \u2506 2   \u2506 19     \u2506 12           \u2502\n\u2502 B    \u2506 3   \u2506 11     \u2506 -8           \u2502\n\u2502 B    \u2506 4   \u2506 11     \u2506 0            \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'user': ['A','A','A','A','B','B','B','B'],\n    'day': [1,2,3,4,1,2,3,4],\n    'logins': np.random.randint(1, 20, 8).tolist()\n})\n\nresult = df.with_columns(\n    pl.col(\"logins\").diff().over(\"user\").alias(\"daily_change\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"78-how-to-compute-each-employees-salary-as-a-percentage-of-their-department-total\">78. How to compute each employee&#8217;s salary as a percentage of their department total?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Add a column showing what percentage of the department salary each employee represents.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'dept': ['Sales','Sales','Sales','Eng','Eng','Eng'],\n    'employee': ['Alice','Bob','Carol','Dave','Eve','Frank'],\n    'salary': (np.random.randint(50, 150, 6) * 1000).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 dept  \u2506 employee \u2506 salary \u2506 pct_of_dept \u2502\n\u2502 ---   \u2506 ---      \u2506 ---    \u2506 ---         \u2502\n\u2502 str   \u2506 str      \u2506 i32    \u2506 f64         \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Sales \u2506 Alice    \u2506 101000 \u2506 32.9        \u2502\n\u2502 Sales \u2506 Bob      \u2506 142000 \u2506 46.3        \u2502\n\u2502 Sales \u2506 Carol    \u2506 64000  \u2506 20.8        \u2502\n\u2502 Eng   \u2506 Dave     \u2506 121000 \u2506 40.2        \u2502\n\u2502 Eng   \u2506 Eve      \u2506 110000 \u2506 36.5        \u2502\n\u2502 Eng   \u2506 Frank    \u2506 70000  \u2506 23.3        \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'dept': ['Sales','Sales','Sales','Eng','Eng','Eng'],\n    'employee': ['Alice','Bob','Carol','Dave','Eve','Frank'],\n    'salary': (np.random.randint(50, 150, 6) * 1000).tolist()\n})\n\nresult = df.with_columns(\n    (pl.col(\"salary\") \/ pl.col(\"salary\").sum().over(\"dept\") * 100).round(1).alias(\"pct_of_dept\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"79-how-to-detect-the-start-of-a-new-streak-in-a-sequence\">79. How to detect the start of a new streak in a sequence?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Given a Series of status values, flag each row where a new streak begins (i.e., the value changes from the previous row).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"status\", ['ok','ok','fail','fail','fail','ok','fail','ok','ok'])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (9, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 idx \u2506 status \u2506 is_new_streak \u2502\n\u2502 --- \u2506 ---    \u2506 ---           \u2502\n\u2502 u32 \u2506 str    \u2506 bool          \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0   \u2506 ok     \u2506 null          \u2502\n\u2502 1   \u2506 ok     \u2506 false         \u2502\n\u2502 2   \u2506 fail   \u2506 true          \u2502\n\u2502 3   \u2506 fail   \u2506 false         \u2502\n\u2502 4   \u2506 fail   \u2506 false         \u2502\n\u2502 5   \u2506 ok     \u2506 true          \u2502\n\u2502 6   \u2506 fail   \u2506 true          \u2502\n\u2502 7   \u2506 ok     \u2506 true          \u2502\n\u2502 8   \u2506 ok     \u2506 false         \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nser = pl.Series(\"status\", ['ok','ok','fail','fail','fail','ok','fail','ok','ok'])\n\ndf = ser.to_frame(\"status\").with_row_index(\"idx\")\nresult = df.with_columns(\n    (pl.col(\"status\") != pl.col(\"status\").shift(1)).alias(\"is_new_streak\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"80-how-to-compute-the-row-wise-coefficient-of-variation\">80. How to compute the row-wise coefficient of variation?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Compute the coefficient of variation (std \/ mean) across the columns for each row.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(10, 100, 30).reshape(6, 5).tolist(), schema=[f\"s{i}\" for i in range(5)])\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 cv     \u2502\n\u2502 ---    \u2502\n\u2502 f64    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 0.4706 \u2502\n\u2502 0.0696 \u2502\n\u2502 0.6956 \u2502\n\u2502 0.6162 \u2502\n\u2502 0.3786 \u2502\n\u2502 0.4025 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame(np.random.randint(10, 100, 30).reshape(6, 5).tolist(), schema=[f\"s{i}\" for i in range(5)])\n\nmeans = pl.mean_horizontal(pl.all())\nstds = pl.concat_list(pl.all()).list.eval(pl.element().std()).list.first()\nresult = df.with_columns(\n    (stds \/ means).round(4).alias(\"cv\")\n)\nprint(result.select(\"cv\"))<\/pre>\n<\/details>\n<h2 id=\"81-how-to-build-a-pivot-table-with-multiple-aggregations\">81. How to build a pivot table with multiple aggregations?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Group by <code>region<\/code> and <code>product<\/code>, then compute total sales, average sales, and total quantity.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'region': ['East','East','West','West','East','West'] * 2,\n    'product': ['A','B','A','B','A','B'] * 2,\n    'sales': np.random.randint(100, 1000, 12).tolist(),\n    'qty': np.random.randint(1, 50, 12).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 region \u2506 product \u2506 total_sales \u2506 avg_sales \u2506 total_qty \u2502\n\u2502 ---    \u2506 ---     \u2506 ---         \u2506 ---       \u2506 ---       \u2502\n\u2502 str    \u2506 str     \u2506 i32         \u2506 f64       \u2506 i32       \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 East   \u2506 A       \u2506 1774        \u2506 444.0     \u2506 98        \u2502\n\u2502 East   \u2506 B       \u2506 655         \u2506 328.0     \u2506 33        \u2502\n\u2502 West   \u2506 A       \u2506 1674        \u2506 837.0     \u2506 26        \u2502\n\u2502 West   \u2506 B       \u2506 1076        \u2506 269.0     \u2506 114       \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'region': ['East','East','West','West','East','West'] * 2,\n    'product': ['A','B','A','B','A','B'] * 2,\n    'sales': np.random.randint(100, 1000, 12).tolist(),\n    'qty': np.random.randint(1, 50, 12).tolist()\n})\n\nresult = df.group_by([\"region\", \"product\"]).agg(\n    pl.col(\"sales\").sum().alias(\"total_sales\"),\n    pl.col(\"sales\").mean().round(0).alias(\"avg_sales\"),\n    pl.col(\"qty\").sum().alias(\"total_qty\")\n).sort([\"region\", \"product\"])\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"82-how-to-create-a-rolling-mean-column\">82. How to create a rolling mean column?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Create a 5-period rolling mean of column <code>'medv'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv')\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 medv \u2506 rolling_medv \u2502\n\u2502 ---  \u2506 ---          \u2502\n\u2502 f64  \u2506 f64          \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 24.0 \u2506 null         \u2502\n\u2502 21.6 \u2506 null         \u2502\n\u2502 34.7 \u2506 null         \u2502\n\u2502 33.4 \u2506 null         \u2502\n\u2502 36.2 \u2506 29.98        \u2502\n\u2502 28.7 \u2506 30.92        \u2502\n\u2502 22.9 \u2506 31.18        \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv')\n\ndf = df.with_columns(\n    pl.col(\"medv\").rolling_mean(window_size=5).alias(\"rolling_medv\")\n)\nprint(df.select([\"medv\", \"rolling_medv\"]).head(7))<\/pre>\n<\/details>\n<h2 id=\"83-how-to-find-the-first-occurrence-of-each-unique-value\">83. How to find the first occurrence of each unique value?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>For each unique <code>category<\/code>, find the row index and value of its first appearance.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'category': ['B','A','C','A','B','C','A','B'],\n    'value': np.random.randint(10, 99, 8).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 category \u2506 first_seen_at \u2506 first_value \u2502\n\u2502 ---      \u2506 ---           \u2506 ---         \u2502\n\u2502 str      \u2506 u32           \u2506 i32         \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 B        \u2506 0             \u2506 61          \u2502\n\u2502 A        \u2506 1             \u2506 24          \u2502\n\u2502 C        \u2506 2             \u2506 81          \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'category': ['B','A','C','A','B','C','A','B'],\n    'value': np.random.randint(10, 99, 8).tolist()\n})\n\nresult = df.with_row_index(\"idx\").group_by(\"category\").agg(\n    pl.col(\"idx\").first().alias(\"first_seen_at\"),\n    pl.col(\"value\").first().alias(\"first_value\")\n).sort(\"first_seen_at\")\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"84-how-to-find-duplicate-rows-in-a-dataframe\">84. How to find duplicate rows in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L1<\/strong><\/p>\n<p>Find duplicate rows based on all columns.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'a': [1, 2, 2, 3, 3],\n    'b': ['x', 'y', 'y', 'z', 'z'],\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 a   \u2506 b   \u2502\n\u2502 --- \u2506 --- \u2502\n\u2502 i64 \u2506 str \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2   \u2506 y   \u2502\n\u2502 2   \u2506 y   \u2502\n\u2502 3   \u2506 z   \u2502\n\u2502 3   \u2506 z   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'a': [1, 2, 2, 3, 3],\n    'b': ['x', 'y', 'y', 'z', 'z'],\n})\n\nresult = df.filter(pl.struct(pl.all()).is_duplicated())\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"85-how-to-identify-the-top-performer-in-each-group\">85. How to identify the top performer in each group?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>From <code>df<\/code>, select the player with the highest score in each team \u2014 using a window function, not <code>group_by<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'team': ['Red','Red','Red','Blue','Blue','Blue','Green','Green','Green'],\n    'player': ['A','B','C','D','E','F','G','H','I'],\n    'score': np.random.randint(50, 100, 9).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 team  \u2506 player \u2506 score \u2502\n\u2502 ---   \u2506 ---    \u2506 ---   \u2502\n\u2502 str   \u2506 str    \u2506 i32   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Red   \u2506 A      \u2506 88    \u2502\n\u2502 Blue  \u2506 D      \u2506 92    \u2502\n\u2502 Green \u2506 G      \u2506 88    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'team': ['Red','Red','Red','Blue','Blue','Blue','Green','Green','Green'],\n    'player': ['A','B','C','D','E','F','G','H','I'],\n    'score': np.random.randint(50, 100, 9).tolist()\n})\n\nresult = df.filter(\n    pl.col(\"score\") == pl.col(\"score\").max().over(\"team\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"86-how-to-compute-z-scores-per-group\">86. How to compute z-scores per group?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Compute the z-score of <code>value<\/code> within each group using window functions.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'group': ['A','A','A','A','B','B','B','B'],\n    'value': np.random.normal(50, 10, 8).round(1).tolist()\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 group \u2506 value \u2506 z_score \u2502\n\u2502 ---   \u2506 ---   \u2506 ---     \u2502\n\u2502 str   \u2506 f64   \u2506 f64     \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 A     \u2506 55.0  \u2506 -0.19   \u2502\n\u2502 A     \u2506 48.6  \u2506 -1.13   \u2502\n\u2502 A     \u2506 56.5  \u2506 0.03    \u2502\n\u2502 A     \u2506 65.2  \u2506 1.3     \u2502\n\u2502 B     \u2506 47.7  \u2506 -0.8    \u2502\n\u2502 B     \u2506 47.7  \u2506 -0.8    \u2502\n\u2502 B     \u2506 65.8  \u2506 1.26    \u2502\n\u2502 B     \u2506 57.7  \u2506 0.34    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndf = pl.DataFrame({\n    'group': ['A','A','A','A','B','B','B','B'],\n    'value': np.random.normal(50, 10, 8).round(1).tolist()\n})\n\nresult = df.with_columns(\n    ((pl.col(\"value\") - pl.col(\"value\").mean().over(\"group\")) \/\n     pl.col(\"value\").std().over(\"group\")).round(2).alias(\"z_score\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"87-how-to-compute-expanding-cumulative-window-aggregations\">87. How to compute expanding (cumulative) window aggregations?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Add columns for cumulative sum, running max, and running min of <code>sales<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'day': list(range(1, 8)),\n    'sales': [100, 150, 130, 200, 180, 220, 210]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (7, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 day \u2506 sales \u2506 cum_sales \u2506 running_max \u2506 running_min \u2502\n\u2502 --- \u2506 ---   \u2506 ---       \u2506 ---         \u2506 ---         \u2502\n\u2502 i64 \u2506 i64   \u2506 i64       \u2506 i64         \u2506 i64         \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 1   \u2506 100   \u2506 100       \u2506 100         \u2506 100         \u2502\n\u2502 2   \u2506 150   \u2506 250       \u2506 150         \u2506 100         \u2502\n\u2502 3   \u2506 130   \u2506 380       \u2506 150         \u2506 100         \u2502\n\u2502 4   \u2506 200   \u2506 580       \u2506 200         \u2506 100         \u2502\n\u2502 5   \u2506 180   \u2506 760       \u2506 200         \u2506 100         \u2502\n\u2502 6   \u2506 220   \u2506 980       \u2506 220         \u2506 100         \u2502\n\u2502 7   \u2506 210   \u2506 1190      \u2506 220         \u2506 100         \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'day': list(range(1, 8)),\n    'sales': [100, 150, 130, 200, 180, 220, 210]\n})\n\nresult = df.with_columns(\n    pl.col(\"sales\").cum_sum().alias(\"cum_sales\"),\n    pl.col(\"sales\").cum_max().alias(\"running_max\"),\n    pl.col(\"sales\").cum_min().alias(\"running_min\"),\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"88-how-to-compute-a-conditional-cumulative-sum\">88. How to compute a conditional cumulative sum?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Compute a running total of <code>amount<\/code>, but only accumulate rows where <code>event == 'purchase'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'event': ['login','purchase','login','purchase','login','purchase','login','purchase'],\n    'amount': [0, 50, 0, 30, 0, 80, 0, 20]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 event    \u2506 amount \u2506 running_purchase_total \u2502\n\u2502 ---      \u2506 ---    \u2506 ---                    \u2502\n\u2502 str      \u2506 i64    \u2506 i64                    \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 login    \u2506 0      \u2506 0                      \u2502\n\u2502 purchase \u2506 50     \u2506 50                     \u2502\n\u2502 login    \u2506 0      \u2506 50                     \u2502\n\u2502 purchase \u2506 30     \u2506 80                     \u2502\n\u2502 login    \u2506 0      \u2506 80                     \u2502\n\u2502 purchase \u2506 80     \u2506 160                    \u2502\n\u2502 login    \u2506 0      \u2506 160                    \u2502\n\u2502 purchase \u2506 20     \u2506 180                    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'event': ['login','purchase','login','purchase','login','purchase','login','purchase'],\n    'amount': [0, 50, 0, 30, 0, 80, 0, 20]\n})\n\nresult = df.with_columns(\n    pl.when(pl.col(\"event\") == \"purchase\")\n    .then(pl.col(\"amount\"))\n    .otherwise(0)\n    .cum_sum()\n    .alias(\"running_purchase_total\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"89-how-to-compute-quarter-over-quarter-growth-rate-within-groups\">89. How to compute quarter-over-quarter growth rate within groups?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>For each company, compute the percentage growth in revenue from the previous quarter.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'company': ['AAPL','AAPL','AAPL','GOOG','GOOG','GOOG'],\n    'quarter': ['Q1','Q2','Q3','Q1','Q2','Q3'],\n    'revenue': [100, 120, 115, 200, 230, 250]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (6, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 company \u2506 quarter \u2506 revenue \u2506 prev_revenue \u2506 growth_pct \u2502\n\u2502 ---     \u2506 ---     \u2506 ---     \u2506 ---          \u2506 ---        \u2502\n\u2502 str     \u2506 str     \u2506 i64     \u2506 i64          \u2506 f64        \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 AAPL    \u2506 Q1      \u2506 100     \u2506 null         \u2506 null       \u2502\n\u2502 AAPL    \u2506 Q2      \u2506 120     \u2506 100          \u2506 20.0       \u2502\n\u2502 AAPL    \u2506 Q3      \u2506 115     \u2506 120          \u2506 -4.2       \u2502\n\u2502 GOOG    \u2506 Q1      \u2506 200     \u2506 null         \u2506 null       \u2502\n\u2502 GOOG    \u2506 Q2      \u2506 230     \u2506 200          \u2506 15.0       \u2502\n\u2502 GOOG    \u2506 Q3      \u2506 250     \u2506 230          \u2506 8.7        \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'company': ['AAPL','AAPL','AAPL','GOOG','GOOG','GOOG'],\n    'quarter': ['Q1','Q2','Q3','Q1','Q2','Q3'],\n    'revenue': [100, 120, 115, 200, 230, 250]\n})\n\nresult = df.with_columns(\n    pl.col(\"revenue\").shift(1).over(\"company\").alias(\"prev_revenue\")\n).with_columns(\n    ((pl.col(\"revenue\") - pl.col(\"prev_revenue\")) \/ pl.col(\"prev_revenue\") * 100)\n    .round(1).alias(\"growth_pct\")\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"90-how-to-detect-outliers-using-the-iqr-method\">90. How to detect outliers using the IQR method?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find values in <code>ser<\/code> that fall outside 1.5 \u00d7 IQR from the quartiles.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndata = list(np.random.normal(50, 10, 20).round(1)) + [150.0, -30.0]  # inject outliers\nser = pl.Series(\"data\", data)\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Q1=40.9, Q3=55.4, IQR=14.5\nBounds: [19.1, 77.2]\nOutliers: [150.0, -30.0]\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nimport numpy as np\nnp.random.seed(42)\ndata = list(np.random.normal(50, 10, 20).round(1)) + [150.0, -30.0]\nser = pl.Series(\"data\", data)\n\nq1 = ser.quantile(0.25)\nq3 = ser.quantile(0.75)\niqr = q3 - q1\nlower = q1 - 1.5 * iqr\nupper = q3 + 1.5 * iqr\noutliers = ser.filter((ser < lower) | (ser > upper))\nprint(f\"Q1={q1:.1f}, Q3={q3:.1f}, IQR={iqr:.1f}\")\nprint(f\"Bounds: [{lower:.1f}, {upper:.1f}]\")\nprint(\"Outliers:\", outliers.to_list())<\/pre>\n<\/details>\n<h2 id=\"91-how-to-use-an-anti-join-to-find-missing-records\">91. How to use an anti-join to find missing records?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Given a list of expected IDs and a DataFrame of received records, find which IDs are missing.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nexpected = pl.DataFrame({\"id\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})\nreceived = pl.DataFrame({\"id\": [1, 2, 4, 5, 7, 9], \"value\": [10, 20, 40, 50, 70, 90]})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 1)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 id  \u2502\n\u2502 --- \u2502\n\u2502 i64 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 3   \u2502\n\u2502 6   \u2502\n\u2502 8   \u2502\n\u2502 10  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nexpected = pl.DataFrame({\"id\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})\nreceived = pl.DataFrame({\"id\": [1, 2, 4, 5, 7, 9], \"value\": [10, 20, 40, 50, 70, 90]})\n\nmissing = expected.join(received, on=\"id\", how=\"anti\")\nprint(missing)<\/pre>\n<\/details>\n<h2 id=\"92-how-to-select-columns-by-dtype\">92. How to select columns by dtype?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Select only the float columns from <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>['Min.Price', 'Price', 'Max.Price', 'EngineSize', 'Fuel.tank.capacity', 'Rear.seat.room']\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nresult = df.select(pl.col(pl.Float64))\nprint(result.columns)<\/pre>\n<\/details>\n<h2 id=\"93-how-to-categorize-a-numeric-column-using-whenthenotherwise\">93. How to categorize a numeric column using when\/then\/otherwise?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Categorize <code>'medv'<\/code> into <code>'low'<\/code> (&lt; 20), <code>'medium'<\/code> (20-35), and <code>'high'<\/code> (&gt; 35).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv')\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 medv \u2506 category \u2502\n\u2502 ---  \u2506 ---      \u2502\n\u2502 f64  \u2506 str      \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 24.0 \u2506 medium   \u2502\n\u2502 21.6 \u2506 medium   \u2502\n\u2502 34.7 \u2506 medium   \u2502\n\u2502 33.4 \u2506 medium   \u2502\n\u2502 36.2 \u2506 high     \u2502\n\u2502 28.7 \u2506 medium   \u2502\n\u2502 22.9 \u2506 medium   \u2502\n\u2502 27.1 \u2506 medium   \u2502\n\u2502 16.5 \u2506 low      \u2502\n\u2502 18.9 \u2506 low      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/BostonHousing.csv')\n\ndf = df.with_columns(\n    pl.when(pl.col(\"medv\") < 20).then(pl.lit(\"low\"))\n    .when(pl.col(\"medv\") <= 35).then(pl.lit(\"medium\"))\n    .otherwise(pl.lit(\"high\"))\n    .alias(\"category\")\n)\nprint(df.select([\"medv\", \"category\"]).head(10))<\/pre>\n<\/details>\n<h2 id=\"94-how-to-compute-the-mode-of-each-column-in-a-dataframe\">94. How to compute the mode of each column in a DataFrame?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Find the most frequent value in each column of <code>df<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'color': ['red','blue','red','green','blue','red','blue','green'],\n    'size': ['S','M','L','M','M','S','L','M'],\n    'rating': [5, 3, 5, 4, 3, 5, 3, 4]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>Mode of 'color': red\nMode of 'size': M\nMode of 'rating': 5\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'color': ['red','blue','red','green','blue','red','blue','green'],\n    'size': ['S','M','L','M','M','S','L','M'],\n    'rating': [5, 3, 5, 4, 3, 5, 3, 4]\n})\n\nfor col in df.columns:\n    mode_val = df[col].value_counts().sort(\"count\", descending=True)[0, 0]\n    print(f\"Mode of '{col}': {mode_val}\")<\/pre>\n<\/details>\n<h2 id=\"95-how-to-use-lazy-evaluation-in-polars\">95. How to use lazy evaluation in Polars?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Use lazy evaluation to filter rows where <code>'Price'<\/code> &gt; 30 and select <code>'Manufacturer'<\/code>, <code>'Model'<\/code>, and <code>'Price'<\/code>.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (12, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Manufacturer  \u2506 Model       \u2506 Price \u2502\n\u2502 ---           \u2506 ---         \u2506 ---   \u2502\n\u2502 str           \u2506 str         \u2506 f64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 null          \u2506 Legend      \u2506 33.9  \u2502\n\u2502 Audi          \u2506 100         \u2506 37.7  \u2502\n\u2502 Cadillac      \u2506 DeVille     \u2506 34.7  \u2502\n\u2502 Cadillac      \u2506 Seville     \u2506 40.1  \u2502\n\u2502 Chevrolet     \u2506 Corvette    \u2506 38.0  \u2502\n\u2502 \u2026             \u2506 \u2026           \u2506 \u2026     \u2502\n\u2502 Lincoln       \u2506 Continental \u2506 34.3  \u2502\n\u2502 Lincoln       \u2506 Town_Car    \u2506 36.1  \u2502\n\u2502 Mazda         \u2506 RX-7        \u2506 32.5  \u2502\n\u2502 Mercedes-Benz \u2506 190E        \u2506 31.9  \u2502\n\u2502 Mercedes-Benz \u2506 300E        \u2506 61.9  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\nresult = (\n    df.lazy()\n    .filter(pl.col(\"Price\") > 30)\n    .select([\"Manufacturer\", \"Model\", \"Price\"])\n    .collect()\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"96-how-to-use-window-functions-to-compute-group-level-statistics-alongside-row-level-data\">96. How to use window functions to compute group-level statistics alongside row-level data?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Add a column showing the mean <code>'Price'<\/code> per <code>'Type'<\/code> alongside every row, without collapsing the DataFrame.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (10, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Manufacturer \u2506 Type    \u2506 Price \u2506 mean_price_by_type \u2502\n\u2502 ---          \u2506 ---     \u2506 ---   \u2506 ---                \u2502\n\u2502 str          \u2506 str     \u2506 f64   \u2506 f64                \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Acura        \u2506 Small   \u2506 15.90 \u2506 10.20              \u2502\n\u2502 null         \u2506 Midsize \u2506 33.90 \u2506 27.65              \u2502\n\u2502 Audi         \u2506 Compact \u2506 29.10 \u2506 18.21              \u2502\n\u2502 Audi         \u2506 Midsize \u2506 37.70 \u2506 27.65              \u2502\n\u2502 BMW          \u2506 Midsize \u2506 30.00 \u2506 27.65              \u2502\n\u2502 Buick        \u2506 Midsize \u2506 15.70 \u2506 27.65              \u2502\n\u2502 Buick        \u2506 Large   \u2506 20.80 \u2506 24.30              \u2502\n\u2502 Buick        \u2506 Large   \u2506 23.70 \u2506 24.30              \u2502\n\u2502 Buick        \u2506 Midsize \u2506 26.30 \u2506 27.65              \u2502\n\u2502 Cadillac     \u2506 Large   \u2506 34.70 \u2506 24.30              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\ndf = df.with_columns(\n    pl.col(\"Price\").mean().over(\"Type\").alias(\"mean_price_by_type\")\n)\nwith pl.Config(float_precision=2):\n    print(df.select([\"Manufacturer\", \"Type\", \"Price\", \"mean_price_by_type\"]).head(10))<\/pre>\n<\/details>\n<h2 id=\"97-how-to-understand-the-difference-between-rankmethodmin-and-rankmethoddense\">97. How to understand the difference between <code>rank(method='min')<\/code> and <code>rank(method='dense')<\/code>?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Rank students by score using both <code>min<\/code> and <code>dense<\/code> methods and observe the difference when there are ties.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'student': ['Alice','Bob','Carol','Dave','Eve'],\n    'score': [88, 92, 88, 95, 92]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 4)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 student \u2506 score \u2506 rank_min \u2506 rank_dense \u2502\n\u2502 ---     \u2506 ---   \u2506 ---      \u2506 ---        \u2502\n\u2502 str     \u2506 i64   \u2506 i32      \u2506 i32        \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Alice   \u2506 88    \u2506 4        \u2506 3          \u2502\n\u2502 Bob     \u2506 92    \u2506 2        \u2506 2          \u2502\n\u2502 Carol   \u2506 88    \u2506 4        \u2506 3          \u2502\n\u2502 Dave    \u2506 95    \u2506 1        \u2506 1          \u2502\n\u2502 Eve     \u2506 92    \u2506 2        \u2506 2          \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'student': ['Alice','Bob','Carol','Dave','Eve'],\n    'score': [88, 92, 88, 95, 92]\n})\n\nresult = df.with_columns(\n    pl.col(\"score\").rank(method=\"min\", descending=True).cast(pl.Int32).alias(\"rank_min\"),\n    pl.col(\"score\").rank(method=\"dense\", descending=True).cast(pl.Int32).alias(\"rank_dense\"),\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"98-how-to-clean-and-standardize-messy-string-columns\">98. How to clean and standardize messy string columns?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>Clean <code>first_name<\/code> and <code>last_name<\/code> (strip whitespace, title-case), combine into <code>full_name<\/code>, and normalize <code>email_raw<\/code> to lowercase.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'first_name': ['  John ', 'ALICE', 'bob  ', ' Carol'],\n    'last_name': ['DOE  ', '  Smith', 'JONES', ' Lee  '],\n    'email_raw': ['John.Doe@GMAIL.COM', 'alice@Yahoo.com', 'BOB@hotmail.COM', 'carol@outlook.COM']\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (4, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 full_name   \u2506 email_clean        \u2502\n\u2502 ---         \u2506 ---                \u2502\n\u2502 str         \u2506 str                \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 John Doe    \u2506 john.doe@gmail.com \u2502\n\u2502 Alice Smith \u2506 alice@yahoo.com    \u2502\n\u2502 Bob Jones   \u2506 bob@hotmail.com    \u2502\n\u2502 Carol Lee   \u2506 carol@outlook.com  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'first_name': ['  John ', 'ALICE', 'bob  ', ' Carol'],\n    'last_name': ['DOE  ', '  Smith', 'JONES', ' Lee  '],\n    'email_raw': ['John.Doe@GMAIL.COM', 'alice@Yahoo.com', 'BOB@hotmail.COM', 'carol@outlook.COM']\n})\n\nresult = df.with_columns(\n    (pl.col(\"first_name\").str.strip_chars().str.to_titlecase() + \" \" +\n     pl.col(\"last_name\").str.strip_chars().str.to_titlecase()).alias(\"full_name\"),\n    pl.col(\"email_raw\").str.to_lowercase().alias(\"email_clean\")\n)\nprint(result.select([\"full_name\", \"email_clean\"]))<\/pre>\n<\/details>\n<h2 id=\"99-how-to-extract-date-features-for-machine-learning\">99. How to extract date features for machine learning?<\/h2>\n<p><strong>Difficulty Level: L2<\/strong><\/p>\n<p>From a date column, extract <code>month<\/code>, <code>weekday<\/code>, <code>quarter<\/code>, and create a boolean <code>is_holiday_season<\/code> column (Nov, Dec, Jan).<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\nfrom datetime import date\ndf = pl.DataFrame({\n    'order_date': pl.date_range(date(2024, 1, 1), date(2024, 12, 31), eager=True)\n}).sample(8, seed=42).sort(\"order_date\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (8, 5)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 order_date \u2506 month \u2506 weekday \u2506 quarter \u2506 is_holiday_season \u2502\n\u2502 ---        \u2506 ---   \u2506 ---     \u2506 ---     \u2506 ---               \u2502\n\u2502 date       \u2506 i8    \u2506 i8      \u2506 i8      \u2506 bool              \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 2024-02-15 \u2506 2     \u2506 4       \u2506 1       \u2506 false             \u2502\n\u2502 2024-04-24 \u2506 4     \u2506 3       \u2506 2       \u2506 false             \u2502\n\u2502 2024-08-02 \u2506 8     \u2506 5       \u2506 3       \u2506 false             \u2502\n\u2502 2024-08-09 \u2506 8     \u2506 5       \u2506 3       \u2506 false             \u2502\n\u2502 2024-09-10 \u2506 9     \u2506 2       \u2506 3       \u2506 false             \u2502\n\u2502 2024-10-15 \u2506 10    \u2506 2       \u2506 4       \u2506 false             \u2502\n\u2502 2024-10-19 \u2506 10    \u2506 6       \u2506 4       \u2506 false             \u2502\n\u2502 2024-12-21 \u2506 12    \u2506 6       \u2506 4       \u2506 true              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\nfrom datetime import date\ndf = pl.DataFrame({\n    'order_date': pl.date_range(date(2024, 1, 1), date(2024, 12, 31), eager=True)\n}).sample(8, seed=42).sort(\"order_date\")\n\nresult = df.with_columns(\n    pl.col(\"order_date\").dt.month().alias(\"month\"),\n    pl.col(\"order_date\").dt.weekday().alias(\"weekday\"),\n    pl.col(\"order_date\").dt.quarter().alias(\"quarter\"),\n    (pl.col(\"order_date\").dt.month().is_in([11, 12, 1])).alias(\"is_holiday_season\"),\n)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"100-how-to-explode-a-list-column-and-compute-aggregations\">100. How to explode a list column and compute aggregations?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Each user has a list of tags. Explode the tags, then count how many users have each tag and list who they are.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'user': ['Alice', 'Bob', 'Carol'],\n    'tags': [['python', 'polars', 'ML'], ['python', 'rust'], ['polars', 'ML', 'DL', 'python']]\n})\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (5, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 tags   \u2506 num_users \u2506 users                     \u2502\n\u2502 ---    \u2506 ---       \u2506 ---                       \u2502\n\u2502 str    \u2506 u32       \u2506 list[str]                 \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 python \u2506 3         \u2506 [&quot;Alice&quot;, &quot;Bob&quot;, &quot;Carol&quot;] \u2502\n\u2502 ML     \u2506 2         \u2506 [&quot;Alice&quot;, &quot;Carol&quot;]        \u2502\n\u2502 polars \u2506 2         \u2506 [&quot;Alice&quot;, &quot;Carol&quot;]        \u2502\n\u2502 DL     \u2506 1         \u2506 [&quot;Carol&quot;]                 \u2502\n\u2502 rust   \u2506 1         \u2506 [&quot;Bob&quot;]                   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.DataFrame({\n    'user': ['Alice', 'Bob', 'Carol'],\n    'tags': [['python', 'polars', 'ML'], ['python', 'rust'], ['polars', 'ML', 'DL', 'python']]\n})\n\nresult = df.explode(\"tags\").group_by(\"tags\").agg(\n    pl.col(\"user\").count().alias(\"num_users\"),\n    pl.col(\"user\").alias(\"users\")\n).sort(\"num_users\", descending=True)\nprint(result)<\/pre>\n<\/details>\n<h2 id=\"101-how-to-use-struct-and-unnest-to-work-with-nested-data\">101. How to use <code>struct<\/code> and <code>unnest<\/code> to work with nested data?<\/h2>\n<p><strong>Difficulty Level: L3<\/strong><\/p>\n<p>Create a struct column from <code>'Manufacturer'<\/code> and <code>'Model'<\/code>, then unnest it back.<\/p>\n<p><strong>Solve:<\/strong><\/p>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Write your code below<\/pre>\n<p><strong>Desired Output:<\/strong><\/p>\n<pre style=\"background:#f5f5f5;padding:12px;border-radius:6px;font-size:13px;overflow-x:auto;border:1px solid #e0e0e0;color:#333\"><code>shape: (3, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 car_info            \u2506 Price \u2502\n\u2502 ---                 \u2506 ---   \u2502\n\u2502 struct[2]           \u2506 f64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 {&quot;Acura&quot;,&quot;Integra&quot;} \u2506 15.9  \u2502\n\u2502 {null,&quot;Legend&quot;}     \u2506 33.9  \u2502\n\u2502 {&quot;Audi&quot;,&quot;90&quot;}       \u2506 29.1  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\nshape: (3, 3)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Manufacturer \u2506 Model   \u2506 Price \u2502\n\u2502 ---          \u2506 ---     \u2506 ---   \u2502\n\u2502 str          \u2506 str     \u2506 f64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Acura        \u2506 Integra \u2506 15.9  \u2502\n\u2502 null         \u2506 Legend  \u2506 33.9  \u2502\n\u2502 Audi         \u2506 90      \u2506 29.1  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<details class=\"blogv4-expand\">\n<summary class=\"blogv4-expand__toggle\">Show Solution<\/summary>\n<pre class=\"python-runnable\">import polars as pl\ndf = pl.read_csv('https:\/\/raw.githubusercontent.com\/selva86\/datasets\/master\/Cars93_miss.csv', null_values=\"NA\")\n\n# Create a struct column\ndf_struct = df.select(\n    pl.struct([\"Manufacturer\", \"Model\"]).alias(\"car_info\"),\n    \"Price\"\n)\nprint(df_struct.head())\n\n# Unnest back\ndf_unnested = df_struct.unnest(\"car_info\")\nprint(df_unnested.head())<\/pre>\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>Master Polars with 101 hands-on exercises and solutions \u2014 covering DataFrames, groupby, joins, window functions, lazy eval, and more.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[21],"tags":[2459,2461,2460,1878,2458,22],"class_list":["post-35752","post","type-post","status-publish","format-standard","hentry","category-python","tag-data-analysis","tag-data-science","tag-dataframes","tag-exercises","tag-polars","tag-python"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus\" \/>\n<meta property=\"og:description\" content=\"Master Polars with 101 hands-on exercises and solutions \u2014 covering DataFrames, groupby, joins, window functions, lazy eval, and more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/\" \/>\n<meta property=\"og:site_name\" content=\"machinelearningplus\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/rtipaday\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-19T11:50:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-19T15:39:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/machinelearningplus.com\/wp-content\/uploads\/2026\/03\/og-image-screenshot.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Selva Prabhakaran\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/R_Programming\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Selva Prabhakaran\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"59 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/\"},\"author\":{\"name\":\"Selva Prabhakaran\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#\\\/schema\\\/person\\\/510885c0515804366fa644c38258391e\"},\"headline\":\"101 Polars Exercises for Data Analysis (with Solutions)\",\"datePublished\":\"2026-03-19T11:50:29+00:00\",\"dateModified\":\"2026-03-19T15:39:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/\"},\"wordCount\":3234,\"publisher\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#organization\"},\"keywords\":[\"data analysis\",\"data science\",\"dataframes\",\"Exercises\",\"polars\",\"Python\"],\"articleSection\":[\"Python\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/\",\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/\",\"name\":\"101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#website\"},\"datePublished\":\"2026-03-19T11:50:29+00:00\",\"dateModified\":\"2026-03-19T15:39:13+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/machinelearningplus.com\\\/python\\\/101-polars-exercises-python\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#website\",\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/\",\"name\":\"machinelearningplus\",\"description\":\"Learn Data Science (AI \\\/ ML) Online\",\"publisher\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/machinelearningplus.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#organization\",\"name\":\"machinelearningplus\",\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/MachineLearningplus-logo.svg\",\"contentUrl\":\"https:\\\/\\\/machinelearningplus.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/MachineLearningplus-logo.svg\",\"width\":348,\"height\":36,\"caption\":\"machinelearningplus\"},\"image\":{\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/#\\\/schema\\\/person\\\/510885c0515804366fa644c38258391e\",\"name\":\"Selva Prabhakaran\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/machinelearningplus.com\\\/wp-content\\\/litespeed\\\/avatar\\\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207\",\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/wp-content\\\/litespeed\\\/avatar\\\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207\",\"contentUrl\":\"https:\\\/\\\/machinelearningplus.com\\\/wp-content\\\/litespeed\\\/avatar\\\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207\",\"caption\":\"Selva Prabhakaran\"},\"description\":\"Selva is an experienced Data Scientist and leader, specializing in executing AI projects for large companies. Selva started machinelearningplus to make Data Science \\\/ ML \\\/ AI accessible to everyone. The website enjoys 4 Million+ readership. His courses, lessons, and videos are loved by hundreds of thousands of students and practitioners.\",\"sameAs\":[\"https:\\\/\\\/localhost:8080\\\/\",\"https:\\\/\\\/www.facebook.com\\\/rtipaday\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/R_Programming\"],\"url\":\"https:\\\/\\\/machinelearningplus.com\\\/author\\\/selva86\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/","og_locale":"en_US","og_type":"article","og_title":"101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus","og_description":"Master Polars with 101 hands-on exercises and solutions \u2014 covering DataFrames, groupby, joins, window functions, lazy eval, and more.","og_url":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/","og_site_name":"machinelearningplus","article_author":"https:\/\/www.facebook.com\/rtipaday\/","article_published_time":"2026-03-19T11:50:29+00:00","article_modified_time":"2026-03-19T15:39:13+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/machinelearningplus.com\/wp-content\/uploads\/2026\/03\/og-image-screenshot.png","type":"image\/png"}],"author":"Selva Prabhakaran","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/R_Programming","twitter_misc":{"Written by":"Selva Prabhakaran","Est. reading time":"59 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/#article","isPartOf":{"@id":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/"},"author":{"name":"Selva Prabhakaran","@id":"https:\/\/machinelearningplus.com\/#\/schema\/person\/510885c0515804366fa644c38258391e"},"headline":"101 Polars Exercises for Data Analysis (with Solutions)","datePublished":"2026-03-19T11:50:29+00:00","dateModified":"2026-03-19T15:39:13+00:00","mainEntityOfPage":{"@id":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/"},"wordCount":3234,"publisher":{"@id":"https:\/\/machinelearningplus.com\/#organization"},"keywords":["data analysis","data science","dataframes","Exercises","polars","Python"],"articleSection":["Python"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/","url":"https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/","name":"101 Polars Exercises for Data Analysis (with Solutions) - machinelearningplus","isPartOf":{"@id":"https:\/\/machinelearningplus.com\/#website"},"datePublished":"2026-03-19T11:50:29+00:00","dateModified":"2026-03-19T15:39:13+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/machinelearningplus.com\/python\/101-polars-exercises-python\/"]}]},{"@type":"WebSite","@id":"https:\/\/machinelearningplus.com\/#website","url":"https:\/\/machinelearningplus.com\/","name":"machinelearningplus","description":"Learn Data Science (AI \/ ML) Online","publisher":{"@id":"https:\/\/machinelearningplus.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/machinelearningplus.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/machinelearningplus.com\/#organization","name":"machinelearningplus","url":"https:\/\/machinelearningplus.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/machinelearningplus.com\/#\/schema\/logo\/image\/","url":"https:\/\/machinelearningplus.com\/wp-content\/uploads\/2022\/05\/MachineLearningplus-logo.svg","contentUrl":"https:\/\/machinelearningplus.com\/wp-content\/uploads\/2022\/05\/MachineLearningplus-logo.svg","width":348,"height":36,"caption":"machinelearningplus"},"image":{"@id":"https:\/\/machinelearningplus.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/machinelearningplus.com\/#\/schema\/person\/510885c0515804366fa644c38258391e","name":"Selva Prabhakaran","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/machinelearningplus.com\/wp-content\/litespeed\/avatar\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207","url":"https:\/\/machinelearningplus.com\/wp-content\/litespeed\/avatar\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207","contentUrl":"https:\/\/machinelearningplus.com\/wp-content\/litespeed\/avatar\/a994280177da541405c016f593e86ea7.jpg?ver=1776363207","caption":"Selva Prabhakaran"},"description":"Selva is an experienced Data Scientist and leader, specializing in executing AI projects for large companies. Selva started machinelearningplus to make Data Science \/ ML \/ AI accessible to everyone. The website enjoys 4 Million+ readership. His courses, lessons, and videos are loved by hundreds of thousands of students and practitioners.","sameAs":["https:\/\/localhost:8080\/","https:\/\/www.facebook.com\/rtipaday\/","https:\/\/x.com\/https:\/\/twitter.com\/R_Programming"],"url":"https:\/\/machinelearningplus.com\/author\/selva86\/"}]}},"_links":{"self":[{"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/posts\/35752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/comments?post=35752"}],"version-history":[{"count":10,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/posts\/35752\/revisions"}],"predecessor-version":[{"id":35762,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/posts\/35752\/revisions\/35762"}],"wp:attachment":[{"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/media?parent=35752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/categories?post=35752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/machinelearningplus.com\/wp-json\/wp\/v2\/tags?post=35752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}