You need to enable JavaScript to run this app. pandas按datetime分组减列均值去趋势输出全零如何解决
优惠活动
大模型
产品
解决方案
定价
更多

pandas按datetime分组减列均值去趋势输出全零如何解决

问题产生原因
  • 核心原因是分组操作异常,导致每个分组仅包含1行数据:此时每个元素对应的组内均值就是元素本身,相减后结果自然全为0。
  • 结合你提供的代码片段,具体可排查以下常见错误:
    1. 变量名不统一:构造的DataFrame变量名为arr,但分组时使用了未定义的df变量,若实际运行时df是其他列结构错误的表,会触发分组异常。
    2. 未正确设置列名:你构造DataFrame时没有指定columns参数,默认列名为0~5的整数,此时执行groupby(['Datetime'])会直接报KeyError,若你提前赋值列名时出错,会导致分组键并非预期的时间列,最终分组粒度错误。
    3. 分组键设置错误:若误将唯一值列作为分组键,也会出现单元素分组的问题。
正确实现代码

首先给DataFrame设置正确列名,再执行分组去趋势即可,无需自定义lambda函数,内置方法运行效率更高:

import pandas as pd

# 构造DataFrame并指定列名
arr = pd.DataFrame(
[[201207310930, 0.0022, -0.0160,    0.0055, 0.0324, -0.0328],
[201207310930,  0.0040, -0.0073,    0.0293, 0.0465, -0.0275],   
[201207310930,  -0.0095,-0.0080,    0.0215, 0.0525, -0.0317],   
[201207311030,  -0.0005,-0.0040,    -0.0149,    0.0135, 0.0488],
[201207311030,  -0.0087,-0.0240,    0.0134, 0.0480, -0.0331]]
, columns=['Datetime','x1','x2','x3','x4','x5']
)

# 选择需要去趋势的列:排除Datetime和x1
process_cols = arr.columns.drop(['Datetime', 'x1'])
# 分组计算均值后广播到所有行,原始值减去对应均值完成去趋势
output = arr[process_cols].sub(arr.groupby('Datetime')[process_cols].transform('mean'))
# 可选:将保留的Datetime、x1列合并回结果
output = pd.concat([arr[['Datetime', 'x1']], output], axis=1)

运行上述代码得到的结果和你预期的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 09:24:02