首页 > 解决方案 > 在 DateTimeIndex 中删除具有重复字符串值的行

问题描述

这是我的第一个问题!我会尽量解释清楚:

我有一个带有 DateTimeIndex 的系列,如下所示:

日期时间系列


我需要一个函数来检查日期的“天”值(例如 2020-01-13 12:00:00)并删除该记录,如果该天的值与上一条记录的天值匹配,例如:

约会时间 描述 行动
2020-01-13 11:00:00 第一条记录没有以前的记录可比较 继续
2020-01-13 12:00:00 第二条记录的“天”值与以前相同 丢弃记录
2020-01-13 13:00:00 第三条记录与以前的“天”值相同? 还掉了记录
2020-01-14 11:00:00 与以前相比,第 4 条记录具有唯一的“天”值 继续
2020-02-10 11:00:00 与之前相比,第 5 条记录具有唯一的“天”值 继续
2020-03-20 10:00:00 与之前相比,第 6 条记录具有唯一的“天”值 继续
2020-06-03 10:00:00 与之前相比,第 7 条记录具有唯一的“天”值 继续
2020-06-03 12:00:00 与之前相比,第 8 条记录具有相同的“天”值 丢弃记录

请注意下降需要如何按顺序排列,以便只有一天中的第一个 唯一时间保留在系列中(同一天的较晚时间被删除)。换句话说,我希望每天(每月)只有一条记录,并且该记录需要是一天中的第一次不同 月份的相同“日”值是允许的!

还要记住,我将把这个功能应用到数百个其他系列,就像这个一样(事实上,每个独特的系列都将成为列表的一部分)。

我敢肯定这比看起来要困难得多。例如,如果您已经删除了一条记录,您可能无法使用某种类型的 [n-1] .loc 索引来告诉函数与之前的索引位置进行比较,因为您会告诉它查看丢失的记录?复杂!

标签: pythonpandasdata-manipulation

解决方案


只需使用date而不是创建一个新列,datetime然后根据该列删除重复项。

创建以日期为类型的列。

df['Dates'] = df1['DT'].dt.date 

根据日期列删除重复项,并仅保留第一次出现。

drop_duplicates('Dates', keep='first')

要查看结果: df

如果需要,请删除您创建的新列,如下所示:

df = df.drop(['Dates'], axis=1)

推荐阅读