pandas 分組聚合提示詞(groupby + agg 多指標、transform 組內佔比與排名、pivot_table 透視、結果整理成報表)

用 pandas 做分組統計(按區域按月彙總多個指標、組內佔比、每組取前幾名、透視表)時寫不出或結果格式很亂(多級列名、索引錯位)時用:描述數據和想要的結果表,AI 寫出清晰的分組代碼,講清 agg、transform、apply 各自適合什麼,並把結果整理成可以直接導出的報表。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名熟練使用 pandas 的數據分析師,代碼追求清晰、可讀、向量化。請幫我完成分組統計。

- pandas 版本:[pandas 版本](例:2.2)
- 數據結構(df.head() 與 df.dtypes 的輸出,原樣粘貼):
  [數據結構]
- 想要的結果:[想要的結果](例:每個區域每月的訂單數、銷售額、客單價、銷售額佔該區域全年比例)
- 結果用途:[結果用途](例:導出 Excel 給業務看)

要求:
1. 先說明思路:按哪些列分組、每個指標用什麼聚合;哪些指標需要先聚合再計算(例如客單價 = 銷售額合計 ÷ 訂單數,而不是對每行的單價求平均)。
2. 寫法選擇並說明理由:
   - 多個指標用命名聚合,結果列名直接可讀,避免多級列名;
   - 需要把組內統計結果放回原表每一行時(組內佔比、組內排名、與組平均的差),用 transform;
   - 每組取前 N 名,用排序加分組取頭部,或用分組排名後篩選;
   - 只有在上面都做不到時才用 apply,並說明它通常更慢。
3. 透視:需要行列交叉的報表時用 pivot_table,說明 index、columns、values、aggfunc、fill_value、margins 的作用。
4. 細節:分組列中的空值預設會被丟棄,需要保留時的參數;分類類型分組時未出現的類別是否顯示;按月分組時先把日期轉換為月份;分組後重置索引。
5. 結果整理:列的順序、重命名為中文、數字格式(百分比、保留小數)、排序,導出為 Excel。
6. 用幾行手工計算核對結果。

代碼中每一步加中文註釋。
數據量超過幾百萬行時,提醒我考慮 DuckDB 或 Polars 做同樣的分組聚合(可配合 1113 號提示詞)。

高亮處換成你自己的內容:[pandas 版本]、[數據結構]、[想要的結果]、[結果用途]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[數據結構] 貼 df.head() 和 df.dtypes 的輸出最有用:AI 能看到列名、樣例和類型,比如日期列是不是真正的日期類型,金額列是不是被讀成了文本。

常見坑:

  • 客單價、轉化率這類比率指標,直接對每行的比率求平均,結果是錯的。要先分別彙總分子和分母,再相除。
  • 一次傳入多個聚合函數,得到兩層列名,後面處理和導出都很麻煩。用命名聚合,一步得到清晰的列名。
  • 分組列中有空值時,預設會被直接丟掉,彙總總數和原始數據對不上,卻很難察覺。

追問技巧:追問「把結果再按區域做小計和總計,導出成帶格式的 Excel」(可配合 1133 號 openpyxl 報表提示詞),或「同樣的統計改用 SQL 怎麼寫」。

示例輸出

示例,僅供參考(節選)
python
import pandas as pd

df["月份"] = df["下單時間"].dt.to_period("M").astype(str)

# 1. 命名聚合:列名直接可讀
monthly = (
    df.groupby(["區域", "月份"], dropna=False)          # 保留區域為空的記錄
      .agg(訂單數=("訂單號", "nunique"), 銷售額=("金額", "sum"))
      .reset_index()
)
# 2. 客單價:先彙總再相除
monthly["客單價"] = monthly["銷售額"] / monthly["訂單數"]
# 3. 佔該區域全年的比例:transform 把區域合計放回每一行
monthly["區域內佔比"] = monthly["銷售額"] / monthly.groupby("區域", dropna=False)["銷售額"].transform("sum")

# 透視:行是區域,列是月份,值是銷售額
report = monthly.pivot_table(index="區域", columns="月份", values="銷售額",
                             aggfunc="sum", fill_value=0, margins=True, margins_name="合計")

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~