有没有一种方法可以有效地将一个函数应用于一列中的300万个值?

2024-09-24 22:25:11 发布

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

我目前正在攻读一门关于如何赢得数据科学竞赛的数据科学课程。最后一个项目是我们必须参加的卡格尔竞赛

我的培训数据集有近300万行,其中一列是“购买日期”列

我想计算每个日期到最近的公共假日的距离

例如,如果日期为2014年12月31日,则最接近的PH值为2015年1月1日。相隔的天数为“1”

我想不出一个有效的方法来做这个手术。我有一个带有多个时间戳的列表,每个时间戳都是俄罗斯的公共假日(数据集来自俄罗斯)

def dateDifference (target_date_raw):
    abs_deltas_from_target_date = np.subtract(russian_public_holidays, target_date_raw)
    abs_deltas_from_target_date = [i.days for i in abs_deltas_from_target_date if i.days >= 0]
    index_of_min_delta_from_target_date = np.min(abs_deltas_from_target_date)
    return index_of_min_delta_from_target_date

其中,“俄罗斯公共假日”是公共假日日期列表,“目标日期”是我要计算到最近公共假日距离的日期

这是我用来在数据框中为日期差异创建新列的代码

training_data['closest_public_holiday'] = [dateDifference(i) for i in training_data['date']]

这段代码运行了将近25分钟,没有显示完成的迹象,这就是为什么我向你们寻求帮助

我知道这可能是最不受欢迎的方式,但在我的研究过程中,我真的找不到一个干净的方式来操作一个专栏。我看到很多人说,在单个列上使用“apply”函数是一种糟糕的做法。我对处理如此大的数据集非常陌生,这就是为什么现在我似乎无法找到干净高效的实践。请务必让我知道解决这个问题的最佳方法


Tags: 数据方法from距离target列表dateraw
1条回答
网友
1楼 · 发布于 2024-09-24 22:25:11

试试这个,看看是否有助于计时。我担心它会占用很多内存。我没有要测试的数据。你可以试试

df = pd.DataFrame(pd.date_range('01/01/2021','12/31/2021',freq='M'),columns=['Date'])
holidays = pd.to_datetime(np.array(['1/1/2021','12/25/2021','8/9/2021'])).to_numpy()

假设假期:2021年1月1日、2021年8月9日、2021年12月25日

enter image description here

df['Days Away'] = ( 
    np.min(np.absolute(df.Date.to_numpy()
        .reshape(-1,1) - holidays),axis=1) / 
        np.timedelta64(1, 'D') 
    )

enter image description here

相关问题 更多 >