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

如何在Pandas同一Group By中执行多聚合操作获取扩展结果?

问题:在分组聚合时同时计算diff列的求和值是否可行?

现有如下DataFrame:

date,qq,q_t
1956-01-01,  1,   4
1956-01-02,  2,   5
1956-01-03,  3,   1
1956-01-04,  4,   1
1956-01-05,  5,   1
1956-01-06,  6,   10
1956-01-07,  7,   11
1956-01-08,  8,   12
1956-01-09,  9,   5
1956-01-10,  10,  3
1956-01-11,  11,  3
1956-01-12,  12,  3
1956-01-13,  13,  50
1956-01-14,  14,  51
1956-01-15,  15,  52
1956-01-16,  16,  53
1956-01-17,  17,  1
1956-01-18,  18,  23
1956-01-19,  19,  1

已通过以下代码计算q_t与qq的差值,标记差值非负的行,按连续True值分组后,得到包含日期min、max及计数count的consecutive_days结果:

import pandas as pd
import numpy as np

dfr   = pd.read_csv('test.csv', sep=',',index_col=0,parse_dates=True)

dfr['diff'] = dfr['q_t'] - dfr['qq']

dfr['test'] = np.where(dfr['diff']>=0, True, False)

dfr['diff'] = np.where(dfr['diff']<0 , np.nan, dfr['diff'])

dfr['group'] = (dfr['test'] != dfr['test'].shift()).cumsum()

dfr.reset_index(inplace=True)

true_values = dfr[dfr['test']]

consecutive_days = true_values.groupby('group')['date'].agg(['min', 'max', 'count'])

现希望在该Group By操作中同时计算对应分组的diff列求和值,得到包含sum列的目标结果,而非单独分组求和后处理,请问是否可行?


完全可行,只需要修改groupby后的agg方法,通过字典指定不同列的聚合规则,就能在一次分组操作中同时完成多列的不同聚合计算。

修改后的核心代码

方式一:自定义列名(可读性更强)

consecutive_days = true_values.groupby('group').agg(
    min_date=('date', 'min'),
    max_date=('date', 'max'),
    count_days=('date', 'count'),
    diff_sum=('diff', 'sum')
)

方式二:传统字典格式(适合复杂聚合场景)

consecutive_days = true_values.groupby('group').agg({
    'date': ['min', 'max', 'count'],
    'diff': ['sum']
})

结果说明

以你的数据为例,最终consecutive_days会同时包含日期范围、天数统计以及对应分组的diff求和值,无需额外的合并操作,一次分组就能得到所有目标字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:26