我有一个看起来像这样的数据框:
Publication Date Date Value State
0 2018-12-12 2018-12-11 2.0 AL
1 2018-12-12 2018-12-11 1.0 AZ
2 2018-12-12 2018-12-11 1.0 AK
3 2018-12-12 2018-12-11 2.0 NJ
4 2018-12-12 2018-12-11 1.5 NY
5 2018-12-12 2018-12-12 12.0 AL
6 2018-12-12 2018-12-12 13.0 AZ
7 2018-12-12 2018-12-12 14.0 AK
8 2018-12-12 2018-12-12 12.0 NJ
9 2018-12-12 2018-12-12 11.5 NY
10 2018-12-13 2018-12-12 2.0 AL
11 2018-12-13 2018-12-12 3.0 AZ
12 2018-12-13 2018-12-12 6.0 AK
13 2018-12-13 2018-12-12 1.0 NJ
14 2018-12-13 2018-12-12 4.0 NY
我想删除所有Publication date
= Date + 1
的地方,所以当Publication Date
= 2018-12-12
并且Date
= 2018-12-11
时被丢弃。
它看起来像:
Publication Date Date Value State
2018-12-12 2018-12-12 12.0 AL
2018-12-12 2018-12-12 13.0 AZ
2018-12-12 2018-12-12 14.0 AK
2018-12-12 2018-12-12 12.0 NJ
2018-12-12 2018-12-12 11.5 NY
最简单的方法是什么?
答案 0 :(得分:4)
得到一个面具,用它来过滤df
:
m = df['Publication Date'].eq(df['Date'] + pd.Timedelta(1, unit='D'))
df[~m]
Publication Date Date Value State
5 2018-12-12 2018-12-12 12.0 AL
6 2018-12-12 2018-12-12 13.0 AZ
7 2018-12-12 2018-12-12 14.0 AK
8 2018-12-12 2018-12-12 12.0 NJ
9 2018-12-12 2018-12-12 11.5 NY
如果“发布日期”和“日期”不是日期时间列,请先使用pd.to_datetime(..., errors='coerce')
强制它们。
答案 1 :(得分:1)
使用
df[(df.Publication-df.Date).dt.days!=1]
答案 2 :(得分:0)
为此,请导入timedelta
from datetime import timedelta
首先将date列的数据类型转换为datetime。
df.Date = pd.to_datetime(df.Date)
df["Publication Date"] = pd.to_datetime(df["Publication Date"])
然后过滤数据框
df = df[df["Publication Date"] != df.date + timedelta(days=1)];