如何在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
相关产品推荐
相关产品推荐

