基于日期字典创建具有分类值的新列

2024-05-29 06:02:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个新专栏,说明该条目是否为公共假日。它应该是这样的:

             datetime                    holiday
0 2019-01-01 22:00:00                  public holiday
1 2019-01-01 23:00:00                  public holiday
2 2019-01-02 00:00:00                  non-holiday
3 2019-01-02 01:00:00                  non-holiday
4 2019-01-02 02:00:00                  non-holiday

我制作了一本字典,包含了我这段时间内的所有假期,如下所示:

public_hol = {'xmas 18': '2018-12-25',
             'boxing day 18': '2018-12-25',
             'new years 19': '2019-01-01',
             'good friday 19': '2019-04-19',
             'easter monday 19': '2019-04-22',
             'may bank holiday': '2019-05-22',
             'may bank holiday2': '2019-05-27',
             'xmas 19': '2019-12-25',
             'boxing day 19': '2019-12-26',
             'new years 20': '2020-01-01'}

这是我的代码:

df['holiday'] = df['datetime'].dt.date.map(public_hol).fillna('non-holiday')

这将产生一个新列,该列只包含NA,因此每个条目只有“非假日”。我认为问题在于我使用字典的方式,或者我的代码无法识别日期格式。。。谢谢你的帮助


Tags: 代码newdatetime字典条目publicmaybank
1条回答
网友
1楼 · 发布于 2024-05-29 06:02:49

为了能够使用map(),您需要让字典(而不是)与数据帧或序列中的数据匹配

因此:

  1. 您需要将日期('2018-12-25')映射到它们的名称('xmas 18'
  2. 您需要让这些日期与Pandas(pd.Timestamp)中的日期类型匹配,因为这就是您要映射的

您可以使用以下命令调整当前词典,该命令将反转键和值,并将日期转换为pd.Timestamp类型:

public_hol = {
    pd.to_datetime(v): k
    for k, v in public_hol.items()
}

或者从一开始就以正确的方式定义字典:

public_hol = {
    pd.to_datetime('2018-12-25'): 'xmas 18',
    pd.to_datetime('2018-12-26'): 'boxing day 18',
    ...
}

(请注意,您的字典中似乎有一些拼写错误,您不应该有两次相同的日期,它只能映射到一个假日,目前您的“圣诞节”和“节礼日”都有2018-12-25。)

相关问题 更多 >

    热门问题