使用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
相关产品推荐
相关产品推荐

