如何将DataFrame行值作为字典键传入np.busday_count假期参数
问题原因
你触发报错的核心原因是holidays字典只能接受单个可哈希的字符串作为键取值,而你直接传入了整列df.Country这个Series序列,属于不可哈希的多值结构,自然无法完成取值。
无逐行循环的解决方案
使用pandas的groupby按国家列分组运算,每个国家的所有数据统一调用一次np.busday_count并传入对应国家的假期列表,全程为向量化运算,性能远高于逐行遍历:
import numpy as np import pandas as pd # 提前统一转换日期格式,避免重复计算开销 df['Date_Open'] = df['Date_Open'].astype('datetime64[D]') today = np.datetime64('today') # 按国家分组计算工作日数 df['Aging'] = df.groupby('Country', group_keys=False).apply( lambda group: np.busday_count( group['Date_Open'], today, holidays=holidays.get(group.name, []) ) )
代码说明
group.name为当前分组对应的国家代码,直接作为键从holidays字典取对应国家的假期列表- 用
holidays.get(group.name, [])做兼容处理,如果某国家不在你的假期字典配置中,默认传入空列表(即无额外假期),避免抛出KeyError - 该方案仅需要按国家的数量调用
np.busday_count,即使数据量达到百万级也能快速完成计算
内容的提问来源于stack exchange,提问作者Juan Rodrigues
相关产品推荐
相关产品推荐

