Python Pandas:“Series”对象是可变的,因此在使用 .groupby 时无法进行哈希处理

Python Pandas: "Series" objects are mutable, thus cannot be hashed when using .groupby

提问人:SeanK22 提问时间:9/1/2022 更新时间:9/2/2022 访问量:166

问:

我想取 column['Value'] 的二阶导数并将其放入另一列中。还有另一列称为 ['Cycle'],用于将数据组织成各种循环。因此,对于每个周期,我想取这些数字集的二阶导数。

我试过使用它:

Data3['Diff2'] = Data3.groupby('Cycle#').apply(Data3['Value'] - 2*Data3['Value'].shift(1) + Data3['Value'].shift(2))

这适用于给我二阶导数(在添加 groupby 之前),但现在我收到错误: TypeError:“Series”对象是可变的,因此无法对其进行哈希处理

有人知道为什么吗?

熊猫 数据帧 可变

评论

0赞 adir abargil 9/1/2022
#char 是错别字吗?我认为应用期待一个功能......
0赞 SeanK22 9/1/2022
不,这是列的名称,.apply 工作正常,只是在我添加 groupby 后它就不再工作了

答:

1赞 Baron Legendre 9/2/2022 #1
rng = np.random.default_rng(seed=42)
df = pd.DataFrame(
    {"Cycle#": rng.integers(1,4, size=12),
     "Value": rng.integers(1,11, size=12)*10
     })
df
###
    Cycle#  Value
0        1     80
1        3     80
2        2     80
3        2     80
4        2     60
5        3     20
6        1     90
7        3     50
8        1     60
9        1     40
10       2     20
11       3    100
df['Diff2'] = df.groupby('Cycle#', as_index=False)['Value'].transform(lambda x:x - 2*x.shift(1) + x.shift(2))
df
###
    Cycle#  Value  Diff2
0        1     80    NaN
1        3     80    NaN
2        2     80    NaN
3        2     80    NaN
4        2     60  -20.0
5        3     20    NaN
6        1     90    NaN
7        3     50   90.0
8        1     60  -40.0
9        1     40   10.0
10       2     20  -20.0
11       3    100   20.0