【问题标题】:Use dataframe row value as key for a dictionary使用数据框行值作为字典的键
【发布时间】:2021-10-05 19:52:08
【问题描述】:

我有一个包含“开放日期”列的数据框,我需要计算今天与“开放日期”值之间的工作日。

我用“np.busday_count”处理了这一步

df['Aging'] = np.busday_count(df.Date_Open.values.astype('datetime64[D]'),np.datetime64('today'))

现在我需要在计算中包括假期。但是,假期日期因国家/地区而异。我找到的解决方案是创建一个列表字典,以 df["Country"] 作为键。结果是这样的:

holidays = {'BM': [numpy.datetime64('2021-09-06')],'BO': [numpy.datetime64('2021-09-14')], 'BR': [numpy.datetime64('2021-11-30')]}

问题是当我试图在“np.busday_count”函数的假日参数中使用这个字典时。我想使用数据框中“国家”列的值作为“假期”字典的键。我试过这个(只是一个例子):

df['Aging'] = np.busday_count(df.Date_Open.values.astype('datetime64[D]'),np.datetime64('today'),holidays[df.Country])

但它返回此错误:

TypeError: unhashable type: 'Series'

我想有一个解决方案,我不需要通过循环遍历每一行来计算日期差。

【问题讨论】:

    标签: python pandas dataframe date


    【解决方案1】:

    np.busday_count 不能与假期参数并行化,因此即使我们修复了 dict 问题,您也不能一次性使用它。

    我会先试试.apply,也许会够快?

    today = np.datetime64('today')
    df['Aging'] = df.apply(lambda x: np.busday_count(x.Date_Open, today, holidays=holidays[x.Country])
    

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 2021-12-12
      • 2022-01-10
      • 2022-08-21
      • 2018-01-31
      • 2020-12-12
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多