2016-08-31 6 views
0

В пандах у меня есть два кадра данных. Один из которых содержит Праздники определенной страны от http://www.timeanddate.com/holidays/austria и еще один, содержащий столбец даты. Я хочу рассчитать #days после праздника.python time lags holidays

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, я не уверен, как получить текущую дату/индекс объекта даты во время итерации в приложении. Насколько я знаю, я не могу зацикливаться наоборот. за все мои строки в secondDF, как это было невозможно для меня, чтобы генерировать полнометражных колонки в то время как итерация через apply

ответ

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 

называется лямбда-выражения на основе каждого ряда

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 

 Смежные вопросы

  • Нет связанных вопросов^_^