You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用groupby结合np.where检测数据模式时的报错问题求助

groupby结合np.where检测数据模式时的报错问题求助

我写了一个用np.where检测DataFrame序列中特定模式的函数,逻辑是:找到连续三个小于0的数值,且每个都比前一个更小,同时第四个数值比第三个大的话,就返回1,否则返回0。

这个函数单独运行是正常的,但我需要用groupby把它应用到表格里的所有分组(按Name字段分组),尝试的时候遇到了问题。

先贴一下可以正常运行的代码:

import pandas as pd
import numpy as np

def PFunc1():
    val = np.where((
        (df1['Score'].shift(+3)<0) &
        (df1['Score'].shift(+1)<0) &
        (df1['Score'].shift(+2) < df1['Score'].shift(+3)) &
        (df1['Score'].shift(+1) < df1['Score'].shift(+2)) &
        (df1['Score'] > df1['Score'].shift(+1))),1,0)
    return val

df1 = pd.DataFrame()
df1['Name'] = ['A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A',
               'B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B']
df1['Score'] = np.random.randint(-4,3,df1.shape[0])
df1['Pattern'] = PFunc1()
df1.head(50)

当我运行下面这段代码时,出现了报错:TypeError: unhashable type: 'numpy.ndarray'

df1['Pattern2'] = df1.groupby('Name')['Score'].apply(PFunc1())

用Lambda函数尝试的话,结果全是NaN。

想请教一下:这种需求能用np.where结合groupby实现吗?还是需要换一种思路?

非常感谢!

备注:内容来源于stack exchange,提问作者Flint

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:53:02