python 时间滞后假期
python time lags holidays
在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
由于我是 pandas 的新手,我不确定如何在应用中迭代时获取日期对象的当前 date/index。据我所知,我不能反过来循环,例如在 secondDF
中的所有行中,因为我不可能在通过 apply
迭代时生成特征列
为此,使用公共列连接两个数据框,然后尝试此代码
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
我选择了完全不同的东西:
现在,只会计算距离最近的假期之前的天数。
我的函数:
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 表达式
在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
由于我是 pandas 的新手,我不确定如何在应用中迭代时获取日期对象的当前 date/index。据我所知,我不能反过来循环,例如在 secondDF
中的所有行中,因为我不可能在通过 apply
为此,使用公共列连接两个数据框,然后尝试此代码
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
我选择了完全不同的东西: 现在,只会计算距离最近的假期之前的天数。
我的函数:
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 表达式