首页 > 解决方案 > 计算时间差,如果值不超过某个阈值并且时间差在给定的间隔打印名称

问题描述

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

+-------+------------+------+--------+
| 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,Y 从 2016 年到 2018 年 3 年低于 90,Z 失败,因为它仅在 2016 年低于 90。

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

标签: pythonpandastimetimedelta

解决方案


我们可以在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]

推荐阅读