首页 > 解决方案 > 根据python中的每日表删除每行的所有(每小时)日条目

问题描述

我有一个带有datetime64[ns]格式的对象的数据框,所以我有每小时基数的数据:

Datum                    Values
2020-01-01 00:00:00      1
2020-01-01 01:00:00      10
....
2020-02-28 00:00:00     5
2020-03-01 00:00:00     4

和另一个带有关闭日期的表格,也在datetime64[ns]格式的列中,所以我只有一个日期格式:

Dates
2020-02-28
2020-02-29
....

如何删除第一个数据帧 df 中的所有天数,这些天数出现在第二个数据帧日期中?所以 df 是:

2020-01-01 00:00:00      1
2020-01-01 01:00:00      10
....
2020-03-01 00:00:00      4

标签: pythonpandas

解决方案


用于Series.dt.floortimes 设置为,因此可以在中使用倒置掩码0进行过滤:Series.isinboolean indexing

df['Datum'] = pd.to_datetime(df['Datum'])
df1['Dates'] = pd.to_datetime(df1['Dates'])

df = df[~df['Datum'].dt.floor('d').isin(df1['Dates'])]
print (df)
                Datum  Values
0 2020-01-01 00:00:00       1
1 2020-01-01 01:00:00      10
3 2020-03-01 00:00:00       4

Series.view编辑:对于标志列,通过或将掩码转换为整数Series.astype

df['flag'] = df['Datum'].dt.floor('d').isin(df1['Dates']).view('i1')
#alternative
#df['flag'] = df['Datum'].dt.floor('d').isin(df1['Dates']).astype('int')
print (df)
                Datum  Values  flag
0 2020-01-01 00:00:00       1     0
1 2020-01-01 01:00:00      10     0
2 2020-02-28 00:00:00       5     1
3 2020-03-01 00:00:00       4     0

推荐阅读