在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
答案 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表达式