计算时间差,如果值未超过特定阈值并且时间差在给定的间隔内,则打印名称

问题描述 投票:0回答:1

我有一个看起来像这样的数据框:

+-------+------------+------+--------+
| 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低于90达4年,并且,从2016年到2018年的3年中,Y均低于90,并且Z失败了,因为它在2016年仅低于90。

我真的无法解决这个问题!有没有解决的办法?任何帮助将不胜感激!提前非常感谢您!

python pandas time timedelta
1个回答
0
投票

我们可以做到rolling n这是您的门槛

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]
© www.soinside.com 2019 - 2024. All rights reserved.