Lectures: Nguyễn Tuấn Phong, Đào Việt Anh
Labs: Trịnh Ngọc Huỳnh, Phạm Tiến Du
Semester: 2025-2026-1
Institute for AI, VNU-UET
import pandas as pd
df = pd.DataFrame({"k":["a","a","b"],"v":[1,2,3]})
print(df.groupby("k", as_index=False).agg(total=("v","sum")))
k total
0 a 3
1 b 3
orders = pd.DataFrame({
"cust":["c1","c1","c2","c2","c2"],
"amt":[10,40,5,8,20]
})
out = orders.groupby("cust", as_index=False).agg(
orders=("amt","count"),
revenue=("amt","sum"),
p90=("amt", lambda s: s.quantile(0.9))
)
print(out)
cust orders revenue p90
0 c1 2 50 37.0
1 c2 3 33 17.6
g = orders.groupby("cust")["amt"]
orders["share"] = orders["amt"] / g.transform("sum")
orders["z"] = (orders["amt"] - g.transform("mean")) / g.transform("std")
print(orders.head())
cust amt share z
0 c1 10 0.200000 -1.000000
1 c1 40 0.800000 1.000000
2 c2 5 0.119048 -0.773131
...
def topk(d, k=2):
return d.nlargest(k, "amt")[["cust","amt"]]
print(orders.groupby("cust", group_keys=False).apply(topk, k=1))
cust amt
1 c1 40
4 c2 20
import numpy as np
orders["seg"] = np.where(orders["cust"]=="c1","high","regular")
pt = orders.pivot_table(index="seg", columns="cust", values="amt", aggfunc="sum", margins=True)
print(pt.fillna(0))
cust c1 c2 All
seg
high 50.0 0.0 50.0
regular 0.0 33.0 33.0
All 50.0 33.0 83.0
import pandas as pd
ts = pd.date_range("2024-01-01", periods=7, freq="D")
x = pd.Series([1,3,2,4,5,2,1], index=ts)
print(x.resample("D").sum().head(3))
2024-01-01 1
2024-01-02 3
2024-01-03 2
Freq: D, dtype: int64
roll7 = x.rolling(3, min_periods=1).mean()
print(pd.DataFrame({"x": x, "roll3": roll7}).head(5))
x roll3
2024-01-01 1 1.000000
2024-01-02 3 2.000000
2024-01-03 2 2.000000
2024-01-04 4 3.000000
2024-01-05 5 3.666667