@@ -212,6 +212,22 @@ <h2>1 · Categories and codes</h2>
212212
213213console.log("nCategories:", size.cat.nCategories);
214214console.log("ordered:", size.cat.ordered);</ textarea >
215+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
216+
217+ size = pd.Series(
218+ ["M", "S", "L", "S", "M", "XL"],
219+ name="size",
220+ dtype="category",
221+ )
222+
223+ # Sorted unique categories
224+ print("categories:", size.cat.categories.tolist())
225+
226+ # Integer codes (position in categories array; -1 for null)
227+ print("codes:", size.cat.codes.tolist())
228+
229+ print("nCategories:", len(size.cat.categories))
230+ print("ordered:", size.cat.ordered)</ textarea >
215231 < div class ="playground-output "> Click ▶ Run to execute</ div >
216232 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
217233 </ div >
@@ -237,6 +253,13 @@ <h2>2 · Nulls are encoded as -1</h2>
237253console.log("categories:", [...s.cat.categories.values]);
238254console.log("codes:", s.cat.codes.toArray());
239255console.log("nCategories:", s.cat.nCategories);</ textarea >
256+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
257+
258+ s = pd.Series(["a", None, "b", None, "a"], dtype="category")
259+
260+ print("categories:", s.cat.categories.tolist())
261+ print("codes:", s.cat.codes.tolist())
262+ print("nCategories:", len(s.cat.categories))</ textarea >
240263 < div class ="playground-output "> Click ▶ Run to execute</ div >
241264 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
242265 </ div >
@@ -267,6 +290,18 @@ <h2>3 · Add and remove categories</h2>
267290const s3 = s.cat.removeCategories(["red"]);
268291console.log("after remove values:", s3.toArray());
269292console.log("after remove cats:", [...s3.cat.categories.values]);</ textarea >
293+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
294+
295+ s = pd.Series(["red", "blue", "red"], dtype="category")
296+
297+ # Add a new category (not yet in data)
298+ s2 = s.cat.add_categories(["green"])
299+ print("after add:", s2.cat.categories.tolist())
300+
301+ # Remove a category — matching values become null
302+ s3 = s.cat.remove_categories(["red"])
303+ print("after remove values:", s3.tolist())
304+ print("after remove cats:", s3.cat.categories.tolist())</ textarea >
270305 < div class ="playground-output "> Click ▶ Run to execute</ div >
271306 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
272307 </ div >
@@ -294,6 +329,16 @@ <h2>4 · Remove unused categories</h2>
294329const s3 = s2.cat.removeUnusedCategories();
295330console.log("after:", s3.cat.nCategories);
296331console.log("cats:", [...s3.cat.categories.values]);</ textarea >
332+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
333+
334+ s = pd.Series(["a", "b"], dtype="category")
335+ # Manually add extra categories
336+ s2 = s.cat.add_categories(["c", "d", "e"])
337+ print("before:", len(s2.cat.categories))
338+
339+ s3 = s2.cat.remove_unused_categories()
340+ print("after:", len(s3.cat.categories))
341+ print("cats:", s3.cat.categories.tolist())</ textarea >
297342 < div class ="playground-output "> Click ▶ Run to execute</ div >
298343 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
299344 </ div >
@@ -323,6 +368,18 @@ <h2>5 · Rename categories</h2>
323368// Array replacement (same order as categories)
324369const s3 = s.cat.renameCategories(["H", "L", "M"]);
325370console.log("array rename:", s3.toArray());</ textarea >
371+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
372+
373+ s = pd.Series(["low", "mid", "high", "mid"], dtype="category")
374+
375+ # Object mapping
376+ s2 = s.cat.rename_categories({"low": "L", "mid": "M", "high": "H"})
377+ print("renamed values:", s2.tolist())
378+ print("renamed cats:", s2.cat.categories.tolist())
379+
380+ # Array replacement (same order as categories)
381+ s3 = s.cat.rename_categories(["H", "L", "M"])
382+ print("array rename:", s3.tolist())</ textarea >
326383 < div class ="playground-output "> Click ▶ Run to execute</ div >
327384 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
328385 </ div >
@@ -354,6 +411,18 @@ <h2>6 · Set and reorder categories</h2>
354411const s3 = s.cat.reorderCategories(["XS", "S", "M", "L", "XL"], true);
355412console.log("ordered:", s3.cat.ordered);
356413console.log("custom order:", [...s3.cat.categories.values]);</ textarea >
414+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
415+
416+ s = pd.Series(["XS", "S", "M", "L", "XL"], dtype="category")
417+
418+ # set_categories: restrict to a subset
419+ s2 = s.cat.set_categories(["S", "M", "L"])
420+ print("set cats:", s2.tolist())
421+
422+ # reorder_categories: custom ordering (e.g., by size not alphabetically)
423+ s3 = s.cat.reorder_categories(["XS", "S", "M", "L", "XL"], ordered=True)
424+ print("ordered:", s3.cat.ordered)
425+ print("custom order:", s3.cat.categories.tolist())</ textarea >
357426 < div class ="playground-output "> Click ▶ Run to execute</ div >
358427 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
359428 </ div >
@@ -380,6 +449,14 @@ <h2>7 · Value counts per category</h2>
380449const counts = gradesFull.cat.valueCounts();
381450console.log("categories:", [...gradesFull.cat.categories.values]);
382451console.log("counts:", counts.toArray());</ textarea >
452+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
453+
454+ grades = pd.Series(["A", "B", "A", "C", "B", "A"], dtype="category")
455+ grades_full = grades.cat.add_categories(["D", "F"])
456+
457+ counts = grades_full.value_counts()
458+ print("categories:", grades_full.cat.categories.tolist())
459+ print("counts:", counts.tolist())</ textarea >
383460 < div class ="playground-output "> Click ▶ Run to execute</ div >
384461 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
385462 </ div >
@@ -411,6 +488,20 @@ <h2>8 · Ordered categories</h2>
411488
412489// bad=0, good=1, excellent=2
413490console.log("codes:", ordered.cat.codes.toArray());</ textarea >
491+ < textarea class ="playground-python " style ="display:none "> import pandas as pd
492+
493+ rating = pd.Series(["good", "bad", "excellent", "good"], dtype="category")
494+
495+ # Establish a meaningful order
496+ ordered = rating.cat.reorder_categories(
497+ ["bad", "good", "excellent"], ordered=True
498+ )
499+
500+ print("ordered:", ordered.cat.ordered)
501+ print("categories:", ordered.cat.categories.tolist())
502+
503+ # bad=0, good=1, excellent=2
504+ print("codes:", ordered.cat.codes.tolist())</ textarea >
414505 < div class ="playground-output "> Click ▶ Run to execute</ div >
415506 < div class ="playground-hint "> Ctrl+Enter to run · Tab to indent</ div >
416507 </ div >
0 commit comments