Larkspur tabular transforms, kept small

Recipes

Short, copy-ready answers to common shaping tasks.

Join a lookup table

from larkspur import Frame, derive

rates = {r["ccy"]: float(r["usd"]) for r in Frame.read_csv("rates.csv")}

priced = Frame.read_csv("orders.csv") | derive(
    usd=lambda r: round(float(r["amount"]) * rates[r["ccy"]], 2)
)

Aggregate with a plain dict

totals = {}
for r in Frame.read_csv("sales.csv"):
    totals[r["sku"]] = totals.get(r["sku"], 0) + int(r["qty"])

Reshape between formats

from larkspur import Frame, select

Frame.read_ndjson("events.ndjson") \
     | select("ts", "user", "action") \
     | Frame.write_csv     # attach a sink at the end

Sample a large file

import random
from larkspur import Frame, where

sample = Frame.read_csv("huge.csv") | where(lambda r: random.random() < 0.01)
sample.write_csv("sample.csv")