计算时间差,如果值没有超过一定的阈值,如果时间差在给定的时间间隔内打印名称

Calculate the time difference, if value doesn't pass certain threshold and if time difference is in given interval print name

我有一个如下所示的数据框:

+-------+------------+------+--------+
| Index |    Time    | Name | Weight |
+-------+------------+------+--------+
|     0 | 2016-01-31 | X    |     84 |  
|     1 | 2017-01-31 | X    |     80 | 
|     2 | 2018-01-31 | X    |     86 |  
|     3 | 2019-01-31 | X    |     82 | 
|     4 | 2016-01-31 | Y    |     84 |
|     5 | 2017-01-31 | Y    |     80 |  
|     6 | 2018-01-31 | Y    |     87 |
|     7 | 2019-01-31 | Y    |     90 |
|     8 | 2016-01-31 | Z    |     88 |
|     9 | 2017-01-31 | Z    |     92 |
|    10 | 2018-01-31 | Z    |     91 |
|    11 | 2019-01-31 | Z    |     92 |
+-------+------------+------+--------+

而且我只想为其重量 <= 90 的至少 2 年打印不同的名称。

所以答案是 [X, Y] 因为;

X 连续 4 年低于 90,并且, 从 2016 年到 2018 年,Y 在 3 年内低于 90,并且, Z 失败是因为它在 2016 年仅低于 90。

我实在想不通!有出路吗?任何帮助将不胜感激!提前致谢!

我们可以做到rollingn这是你的门槛

n=2
s=(df['Weight']<90).groupby(df['Name']).rolling(n).sum().eq(n).groupby(level=0).any()
Name
 X         True
 Y         True
 Z        False
Name: Weight, dtype: bool
s.index[s]