蟒蛇时间滞后假期

时间:2016-08-31 12:42:45

标签: python date pandas difference

在pandas中,我有两个数据框。一个包含来自http://www.timeanddate.com/holidays/austria的特定国家/地区的假日,另一个包含日期列。我想在假期后计算#days

def compute_date_diff(x, y):
    difference = y - x
    differenceAsNumber = (difference/ np.timedelta64(1, 'D'))
    return differenceAsNumber.astype(int)

for index, row in holidays.iterrows():
    secondDF[row['name']+ '_daysAfter'] = secondDF.dateColumn.apply(compute_date_diff, args=(row.day,))

但是,这个

  • 计算错误的差异,例如如果>包含超过一年的数据,则holidays超过一年。
  • 很慢。

我如何修复漏洞提高性能?是否有并行申请?或者http://pandas.pydata.org/pandas-docs/stable/timeseries.html#holidays-holiday-calendars怎么样 由于我是熊猫新手,我不确定如何在申请中迭代时获取日期对象的当前日期/索引。据我所知,我不能反过来循环,例如在secondDF中的所有行,因为在通过apply

进行迭代时,我无法生成要素列

2 个答案:

答案 0 :(得分:0)

为此,请使用公共列连接两个数据框,然后尝试此代码

import pandas
import numpy as np
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24'), pandas.Timestamp('2014-01-27'), pandas.Timestamp('2014-01-23')]
df.fr = [pandas.Timestamp('2014-01-26'), pandas.Timestamp('2014-01-27'), pandas.Timestamp('2014-01-24')]
df['ans']=(df.fr-df.to) /np.timedelta64(1, 'D')
print df

输出

          to         fr  ans
0 2014-01-24 2014-01-26  2.0
1 2014-01-27 2014-01-27  0.0
2 2014-01-23 2014-01-24  1.0

答案 1 :(得分:0)

我选择了完全不同的东西: 现在,只计算最新假期之前的天数。

我的职能:

def get_nearest_holiday(holidays, pivot):
   return min(holidays, key=lanbda x: abs(x- pivot)
   # this needs to be converted to an int, but at least the nearest holiday is found efficiently

在每行基础上被称为lambda表达式