另一列的每个连续数据块的最小日期[重复]

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 并将其放在某处...... ;)

以上是关于另一列的每个连续数据块的最小日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

查找另一列具有不同列的重复项

基于另一列的最大值的列上的 SQL 内连接 [重复]

如何通过重复值“另一列的大小”次来创建数组列?

根据另一列中的值删除一列的重复项,Python,Pandas