الدرس 5 من 8

Pandas: التحويل والتجميع

هنا بتبدأ تطلع إجابات حقيقية من الداتا.

أعمدة جديدة

new_columns.py
import pandas as pd

df = pd.read_csv("orders.csv")

df["revenue"] = df["qty"] * df["price"]            # vectorized, like NumPy
df["date"] = pd.to_datetime(df["date"])            # text -> real date
df["month"] = df["date"].dt.month_name()
df["is_big"] = df["revenue"] >= 2000

print(df[["product", "revenue", "month", "is_big"]].head(4))

الترتيب

sort.py
import pandas as pd

df = pd.read_csv("orders.csv")
df["revenue"] = df["qty"] * df["price"]

top3 = df.sort_values("revenue", ascending=False).head(3)
print(top3[["product", "city", "revenue"]])

groupby: أهم دالة في Pandas

الفكرة ٣ خطوات: قسّم الداتا لمجموعات (مثلاً حسب المدينة)، طبّق حساب على كل مجموعة (مثلاً اجمع الإيراد)، واجمع النتايج في جدول واحد. اسمها Split-Apply-Combine.

groupby.py
import pandas as pd

df = pd.read_csv("orders.csv")
df["revenue"] = df["qty"] * df["price"]

by_city = df.groupby("city")["revenue"].sum().sort_values(ascending=False)
print(by_city)

ولو عايز أكتر من حساب مرة واحدة، استخدم agg:

agg.py
import pandas as pd

df = pd.read_csv("orders.csv")
df["revenue"] = df["qty"] * df["price"]

summary = df.groupby("category").agg(
    orders=("order_id", "count"),
    revenue=("revenue", "sum"),
    avg_rating=("rating", "mean"),
).round(2)
print(summary)

جدول محوري (Pivot Table)

لو استخدمت Pivot Table في Excel قبل كده، دي نفس الفكرة: صفوف لحاجة، وأعمدة لحاجة تانية، والخانات فيها رقم محسوب.

pivot.py
import pandas as pd

df = pd.read_csv("orders.csv")
df["revenue"] = df["qty"] * df["price"]

table = df.pivot_table(index="city", columns="category",
                       values="revenue", aggfunc="sum", fill_value=0)
print(table)

دمج جدولين (merge)

الداتا الحقيقية بتبقى متفرقة: جدول أوردرات وجدول تاني فيه تكلفة كل منتج. merge بتربطهم بعمود مشترك، زي VLOOKUP في Excel بس أقوى.

merge.py
import pandas as pd

df = pd.read_csv("orders.csv")
costs = pd.DataFrame({
    "category": ["Electronics", "Fashion", "Home"],
    "margin": [0.15, 0.40, 0.25],          # profit margin per category
})

merged = df.merge(costs, on="category", how="left")
merged["profit"] = merged["qty"] * merged["price"] * merged["margin"]
print(merged.groupby("category")["profit"].sum())
💡 apply للحالات الخاصةلو محتاج منطق مش موجود كدالة جاهزة، df["col"].apply(my_function) بتطبق دالتك على كل قيمة. بس جرب الأول الحل الـ vectorized لأنه أسرع بكتير.
الدرس اللي فات