我有一个看起来像这样的数据框:
+-------+------------+------+--------+
| 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。
我真的无法解决这个问题!有没有解决的办法?任何帮助将不胜感激!提前非常感谢您!
我们可以做到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]