Python 返回一个布尔向量

Python 返回一个布尔向量,python,pandas,Python,Pandas,我有一个时间序列数据库,我想在其中对数据进行分组,以便将它们与同一行中的另一个单元格以及上一个值进行比较 下面的代码将针对整个数据帧返回一个向量,但如果我尝试对它进行分组,则会得到一个带有apply()的数据帧和一个带有agg或transform的错误 样本数据帧 df = pd.DataFrame({ 'group': [1, 1, 1, 2,2,2,1,2, 1], 'target': [100,100,100,100,10,10,10,10,50],'val' :[90,80,70,4,1

我有一个时间序列数据库,我想在其中对数据进行分组,以便将它们与同一行中的另一个单元格以及上一个值进行比较

下面的代码将针对整个数据帧返回一个向量,但如果我尝试对它进行分组,则会得到一个带有apply()的数据帧和一个带有agg或transform的错误

样本数据帧

df = pd.DataFrame({ 'group': [1, 1, 1, 2,2,2,1,2, 1], 'target': [100,100,100,100,10,10,10,10,50],'val' :[90,80,70,4,120,6,60,8, 50] })
df


 group  target  val
0   1    100    90
1   1    100    80
2   1    100    70
3   2    100    4
4   2     10    120
5   2     10    6
6   1     10    60
7   2     10    8
8   1     50    50
下面是我对函数的尝试

def spike(df):
    high = df['val'] > df['target']+25
    rising = df['val'] > df['val'].shift()
    return high & rising

print(spike(df))
print( df.groupby('group').apply(spike))
输出

0    False
1    False
2    False
3    False
4     True
5    False
6     True
7    False
8    False
dtype: bool


       0      1      2      6      8
group                                   
1      False  False  False  False  False
2      False   True  False  False   True

这是我的输出,我试图让第二个输出看起来像第一个输出,但第6行应该为false。

您考虑得太多了:

shift = df.groupby('group')['val'].shift()
df['val'].gt(df['target']+25) & df['val'].gt(shift)
输出:

0    False
1    False
2    False
3    False
4     True
5    False
6    False
7    False
8    False
dtype: bool