Pandas按Cycle#分组计算二阶导数遇报错:Series对象不可哈希
错误原因与修复方案
为什么报错?
你的代码核心问题在于:groupby.apply()的参数用了基于整个Data3的Value列计算逻辑,而非针对每个分组的子数据操作。
apply方法要求传入的是一个能处理单个分组数据的函数,但你直接塞了一个全局生成的Series对象。Python中可变对象(比如Series)无法被哈希,因此触发了TypeError: 'Series' objects are mutable, thus they cannot be hashed错误。
简单来说:你没有在分组内部执行二阶导数计算,反而把整个数据集的运算结果扔给apply,导致类型不匹配。
正确写法
要实现按Cycle#分组计算二阶导数,必须在每个分组的子Series上执行shift和运算:
# 用lambda简洁实现 Data3['Diff2'] = Data3.groupby('Cycle#')['Value'].apply( lambda x: x - 2 * x.shift(1) + x.shift(2) )
或者用命名函数提升可读性:
def compute_second_derivative(series): return series - 2 * series.shift(1) + series.shift(2) Data3['Diff2'] = Data3.groupby('Cycle#')['Value'].apply(compute_second_derivative)
这样每个分组内的Value列会独立计算二阶导数,结果会自动对齐原DataFrame的索引,不会再触发哈希错误。
内容的提问来源于stack exchange,提问作者SeanK22
相关产品推荐
相关产品推荐

