python - 在 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 索引来告诉函数与之前的索引位置进行比较,因为您会告诉它查看丢失的记录?复杂!
解决方案
只需使用date
而不是创建一个新列,datetime
然后根据该列删除重复项。
创建以日期为类型的列。
df['Dates'] = df1['DT'].dt.date
根据日期列删除重复项,并仅保留第一次出现。
drop_duplicates('Dates', keep='first')
要查看结果:
df
如果需要,请删除您创建的新列,如下所示:
df = df.drop(['Dates'], axis=1)