Pandas Groupby列的最后N行的最小值和最大值

时间:2017-10-30 07:21:04

标签: python pandas

时间序列数据与索引相比有3列,即时间

indexTime,A,B,C

我想列出所有最后10 B和C + ve

这意味着我必须做一个

groupby('A')

然后为

设置AND条件
last N rows of B.min() > 0 AND last N rows of C.min() > 0

我该怎么办?

09:00,ABC,1,1
09:00,XYZ,15,2
09:01,ABC,2,4
09:01,XYZ,1,2
09:02,ABC,-1,2
09:02,XYZ,1,7
09:03,ABC,3,5
09:03,XYZ,5,2

让我们说最后3 在这种情况下,XYZ将满足条件,因为它有B和C列最后3行为正,而ABC没有所有最后3行为正

ABC 09:02的B栏是-1,所以即使ABC的C栏都是正数,它也会失败。但由于AND条件,它将失败

因此对于条件输出将是XYZ,因为只满足条件

1 个答案:

答案 0 :(得分:1)

使用groupbytailall一起检查所有True

a = df.groupby('A').apply(lambda x: (x.tail(3) > 0).all(1))
print (a)
     09:01  09:02  09:03
A                       
ABC   True  False   True
XYZ   True   True   True

b = a.index[a.all(1)]
print (b)
Index(['XYZ'], dtype='object', name='A')
print (a)
A        ABC   XYZ
09:01   True  True
09:02  False  True
09:03   True  True

b = a.columns[a.all()].tolist()
print (b)
['XYZ']