【发布时间】:2021-12-20 08:37:18
【问题描述】:
我目前有这个数据框:
id date outcome
3 03/05/2019 no
3 29/05/2019 no
3 04/09/2019 no
3 30/10/2019 yes
3 03/05/2020 no
5 03/12/2019 no
5 26/12/2019 no
5 27/01/2020 yes
5 03/06/2020 yes
6 04/05/2019 no
6 27/10/2019 no
6 26/11/2019 yes
6 28/11/2019 yes
6 29/11/2019 yes
6 13/04/2020 yes
6 14/04/2020 yes
6 24/04/2020 no
6 30/04/2020 no
6 05/05/2020 no
按id分组,按日期升序排列。
如果后面的行具有相同的结果,我想删除当前行。但是,如果一行的结果是肯定的,那么下一行必须是第一个否定的。这是上述数据框的预期结果:
id date outcome
3 04/09/2019 no
3 30/10/2019 yes
3 03/05/2020 no
5 26/12/2019 no
5 03/06/2020 yes
6 27/10/2019 no
6 14/04/2020 yes
6 24/04/2020 no
目前我正在这样做:
m1 = (df['outcome'] != df['outcome'].shift()).cumsum()
updated_df = df.groupby([df['id'],m1]).tail(1)
但是,这只给了我分组是/否计数的最后一个值(是/否)。如何以尽可能熊猫的方式应用条件?
【问题讨论】:
-
我不明白这个条件。对于
id=3,“是”之后的行(即日期为 03/05/2020 的行)不是结果为“否”的组的第一行,但它仍然存在于预期输出中。 -
@HarryPlotter 这有点棘手,一开始我弄错了。基本上它是删除连续的重复项,保留最后一个,除非在“是”之后,保留第一个。一切,每组。
-
@mozway 这更有意义,感谢您的清理!
标签: python pandas dataframe time-series