如何更简便地对DataFrame非时间列H下采样并聚合其他列?
Pandas下采样浮点列并对其他列求和的简便实现
需求:对DataFrame中浮点型列H按1.0间隔下采样,同时将其余事件计数器列(如A、B)的值累加求和。
示例数据
import pandas as pd df = pd.DataFrame( data=[ [1.0, 4, 2], [1.5, 3, 2], [2.0, 3, 3], [2.5, 2, 5] ], columns=['H', 'A', 'B'] )
原DataFrame输出:
H A B 0 1.0 4 2 1 1.5 3 2 2 2.0 3 3 3 2.5 2 5
期望结果
H A B 0 1.0 7 4 1 2.0 5 8
简便实现方式
方法1:分组时指定聚合列(推荐)
直接在groupby后指定需要求和的列,避免对H列执行求和操作,同时将分组键转为浮点型以匹配期望格式:
# 按H的整数部分分组,仅对A、B列求和 result = df.groupby((df['H'] // 1).astype(float))[['A', 'B']].sum().reset_index() print(result)
输出结果完全符合需求,无需额外清理步骤。
方法2:使用agg自定义聚合规则
通过agg分别指定H列的取值规则(取分组的基准浮点值)和其他列的求和规则:
result = df.groupby(df['H'].apply(lambda x: int(x))).agg( H=('H', lambda x: float(int(x))), # 将分组键转为浮点型 A=('A', 'sum'), B=('B', 'sum') ).reset_index(drop=True) print(result)
原方法的问题
原方法中groupby.sum()会对所有列(包括H)执行求和,导致H列出现冗余的累加值,需要额外删除列和重置索引。上述两种方法直接在分组聚合阶段就完成了格式和计算需求,一步到位。
内容的提问来源于stack exchange,提问作者Raf
相关产品推荐
相关产品推荐

