另一列的每个连续数据块的最小日期[重复]
Posted
技术标签:
【中文标题】另一列的每个连续数据块的最小日期[重复]【英文标题】:Minimum date of each continuous block of data of another column [duplicate] 【发布时间】:2022-01-24 02:19:48 【问题描述】:我有一个包含时间序列数据的数据框,如下所示:
Date Value
0 2021-12-01 A
1 2021-12-02 A
2 2021-12-03 A
3 2021-12-04 B
4 2021-12-05 B
5 2021-12-06 A
6 2021-12-07 A
7 2021-12-08 C
我正在尝试将其减少为只有“值”列的每个连续块的第一个日期。所以结果看起来像:
Date Value
0 2021-12-01 A
1 2021-12-04 B
2 2021-12-06 A
3 2021-12-08 C
我尝试了很多不同的蒙版方法,根据蒙版删除重复项等,但无法做到。任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:您可以使用ne
(不等于)+shift
创建一个掩码,其中每个连续组的第一个值为 True,然后 cumsum
为每个组创建一个唯一的所有组共享项目。
然后,drop_duplicates
基于那个,并使用返回行的索引来索引数据帧:
subset = df.loc[df['Value'].ne(df['Value'].shift(1)).cumsum().drop_duplicates().index]
输出:
>>> subset
Date Value
0 2021-12-01 A
3 2021-12-04 B
5 2021-12-06 A
7 2021-12-08 C
【讨论】:
太棒了,谢谢!我有第一部分(ne + shift
)和最后一部分(drop_duplicates
),但缺少cumsum
。
是的,cumsum 的用途不仅仅是获取数字列的 cumsum 并将其放在某处...... ;)以上是关于另一列的每个连续数据块的最小日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章