熊猫groupby返回布尔向量

时间:2020-04-10 19:20:10

标签: 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,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。

1 个答案:

答案 0 :(得分:1)

您想得太多了:

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