You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dask DataFrame使用pd.Grouper报错,求实现方案或等效替代方法

在Dask DataFrame中替代pd.Grouper的解决方案

问题描述

在Dask DataFrame中尝试使用pd.Grouper进行多维度+时间频率分组时,触发如下错误:

NotImplementedError: pd.Grouper is currently not supported by Dask

示例代码如下(补全了缺失的Timestamp导入):

import pandas as pd
import dask.dataframe as dd
from pandas import Timestamp

data_dict = {
    "FaturaTarih": {
        0: Timestamp("2021-10-04 00:00:00"),
        1: Timestamp("2021-12-18 00:00:00"),
        2: Timestamp("2021-10-09 00:00:00"),
        3: Timestamp("2021-12-18 00:00:00"),
        4: Timestamp("2021-12-26 00:00:00"),
    },
    "MüsteriNo": {0: "0", 1: "1", 2: "2", 3: "3", 4: "4"},
    "SUBEADI": {0: "O", 1: "O", 2: "O", 3: "K", 4: "K"},
    "KATEGORIADI": {0: "SO", 1: "BU", 2: "RE", 3: "ÇİKOLATALAR", 4: "AT"},
    "MüsteriSınıf": {0: "LOK", 1: "LOK", 2: "LOK", 3: "KAFE", 4: "EGI"},
    "Adet": {0: 12.0, 1: 1.0, 2: 1.0, 3: 36.0, 4: 20.0},
    "NetTutar": {0: 9.38, 1: 13.52, 2: 17.5, 3: 102.6, 4: 29.6},
}

df = dd.from_pandas(pd.DataFrame(data_dict), npartitions=4)
# 原报错代码
# new_df = (pd.DataFrame(df.groupby(['MüsteriNo', 'SUBEADI', 'KATEGORIADI', pd.Grouper(key='FaturaTarih', freq='M')])
#                        [['Adet', 'NetTutar']].sum()).reset_index())

等效解决方案

由于Dask对pd.Grouper的支持尚未覆盖所有多分组场景,最稳定的替代方式是提前生成时间周期列,再将其加入分组维度:

方法:创建时间周期列后分组

利用Dask的dt访问器将时间列转换为目标频率的周期(如月份),再执行分组求和:

# 生成按月份聚合的时间列
df['FaturaAy'] = df['FaturaTarih'].dt.to_period('M')

# 替换原pd.Grouper逻辑,直接使用新列分组
new_df = df.groupby(['MüsteriNo', 'SUBEADI', 'KATEGORIADI', 'FaturaAy']) \
           [['Adet', 'NetTutar']].sum().reset_index().compute()

# 查看结果
print(new_df)

关键说明

  • dt.to_period('M')会将FaturaTarih转换为YYYY-MM格式的周期对象,与pd.Grouper(freq='M')的聚合逻辑完全一致。
  • 若需要其他时间频率(如季度'Q'、天'D'),只需修改to_period的参数即可。
  • 最后调用compute()将Dask DataFrame转换为Pandas DataFrame(若需保持分布式计算可省略此步)。

内容的提问来源于stack exchange,提问作者Nuri Taş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:56:08