时间序列数据除了索引之外还有 3 列,即时间
indexTime,A,B,C
我想列出所有具有最后 10 个 B 和 C +ve 的 A
这意味着我必须做
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,因为只有满足条件
最佳答案
使用groupby
与 tail
和 all
检查所有 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']
关于python - Pandas Groupby 列的最后 N 行的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47009890/