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

Pandas使用Group By按日期小时分组实现去重求和的代码解决方案

解决方案

你的原有代码直接使用sum聚合会计算分组内所有值的总和,要实现分组后先去重再求和,调整聚合逻辑即可,以下是修改后的完整代码:

dfmi['Time'] = pd.to_datetime(dfmi['Time'], format='%H:%M:%S')
dfmi['hours'] = dfmi['Time'].dt.hour

# 核心修改:聚合时对每个分组的指定列先去重再求和
sum_dh = dfmi.groupby(['Date','hours']).agg({
    'Amount': lambda x: x.drop_duplicates().sum(),
    'Price': lambda x: x.drop_duplicates().sum()
})

# 如果你需要将Date、hours从多级索引转为普通列,添加下面这行即可
# sum_dh = sum_dh.reset_index()

dfdhsum = pd.DataFrame(sum_dh)
# 如果上面执行了reset_index,列名要改成 ['Date','hours','Amount', 'Gas Sales']
dfdhsum.columns = ['Amount', 'Gas Sales']
dfdhsum

如果你的去重逻辑是先对Date+hours分组下的整行重复数据去重,再做聚合,可以先执行去重再分组,代码如下:

dfmi['Time'] = pd.to_datetime(dfmi['Time'], format='%H:%M:%S')
dfmi['hours'] = dfmi['Time'].dt.hour

# 先按分组键+聚合字段去重,再分组求和
sum_dh = dfmi.drop_duplicates(subset=['Date','hours','Amount','Price'])\
             .groupby(['Date','hours'])\
             .agg({'Amount': 'sum', 'Price':'sum'})

dfdhsum = pd.DataFrame(sum_dh)
dfdhsum.columns = ['Amount', 'Gas Sales']
dfdhsum

内容的提问来源于stack exchange,提问作者Erlangga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:03