熊猫,从日期列创建缺少日期字典



我有一个DataFrame,它包含去年的数据,但日期列缺少一些日期

date
0      2019-10-21
1      2019-10-29
2      2019-11-01
3      2019-11-04
4      2019-11-05

我想创建一个日期间隔的字典,所以关键字是开始日期,值是结束日期,类似于:

dates_gaps = {2019-10-21:2019-10-29, 2019-10-29:2019-11-01,2019-11-01:2019-11-04 ...}

所以我创建了一个列来指示是否与以下内容存在差距:

df['missing_dates'] = df[DATE].diff().dt.days > 1

其输出以下内容:

# True indicates if there's a gap or not
0    2019-10-21          False
1    2019-10-29           True
2    2019-11-01           True
3    2019-11-04           True
4    2019-11-05          False

我在这里遇到了麻烦

您可以添加比较缺失值的条件,通过Series.dt.strftimedate列转换为字符串,最后使用zip:创建字典

diff = df['date'].diff()
s = df.loc[(diff.dt.days > 1) | diff.isna(), 'date'].dt.strftime('%Y-%m-%d')
print (s)
0    2019-10-21
1    2019-10-29
2    2019-11-01
3    2019-11-04
Name: date, dtype: object
d = dict(zip(s, s.shift(-1)[:-1]))
print (d)
{'2019-10-21': '2019-10-29', '2019-10-29': '2019-11-01', '2019-11-01': '2019-11-04'}

只需将这些日期转换为datetime,并找出两个相邻日期之间的差异。

a = pd.to_datetime('1900-01-01', format='%Y-%m-%d')
b = pd.to_datetime('1900-02-01', format='%Y-%m-%d')
c = a-b
c.days  # -31

最新更新