Pandas分组后重采样,分组键何时会被保留?
Pandas groupby-resample 聚合函数差异原因解析
核心逻辑
这个差异的本质是不同聚合函数对非数值类型列的处理规则不同,结合你的场景具体拆解:
1. sum() 聚合的行为
sum() 是面向数值型数据的聚合函数,会自动忽略无法进行求和运算的非数值列(比如你的字符串列A),仅对数值列(此处为B)执行计算。
- 在
groupby('A').resample('H').sum()的执行流程中,分组后的A列是字符串类型,sum()无法对其进行求和操作,因此直接将该列排除在聚合结果之外,最终仅保留数值列B。
2. max() 聚合的行为
max() 支持对字符串类型执行聚合(基于字典序取最大值),在你的场景中:
- 每个
groupby('A')分组内的A列值完全一致(如a分组内全为'a'),对其执行max()会得到该分组的键值本身; - 因此
max()会保留A列并输出其聚合结果,最终结果同时包含A和B两列。
额外验证示例
若将A列改为数值类型:
sdf = pd.DataFrame({'A': [1,1,2,2], 'B':[3,2,1,0], 'T': ts_col}) sdf.set_index('T').groupby('A').resample('H').sum()
此时sum()会保留A列(分组内A的和等于分组键值),进一步验证了sum()仅过滤非数值列的规则。
内容的提问来源于stack exchange,提问作者myrion
相关产品推荐
相关产品推荐

