2016-07-13 2 views
1

날짜 열과 int 열의 두 열이있는 팬더 데이터 프레임이 있고 날짜 열에 int 열 (일 단위)을 추가하기 만하면됩니다. . df.apply()를 사용하여 솔루션을 찾았지만 전체 데이터 세트에서 너무 느립니다. 벡터화 된 방식으로이 작업을 수행하는 데 필요한 많은 설명서가 없습니다 (찾을 수있는 가장 가까운 것이 this). 그래서 내가 찾은 해결책이 앞으로 나아갈 수있는 최선의 방법인지 확인하고 싶었습니다.팬더 : 날짜/시간 열 (벡터화 됨)에 timedelta 열 추가

원시 데이터는 ints (일)의 열로 구성된 문자열의 열입니다.

import pandas as pd 
from datetime import timedelta 

df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]], 
        columns = ['ship_string','days_supply']) 
print df 

ship_string days_supply 
0 2016-01-10   28 
1 2016-05-11   28 
2 2016-02-23   15 
3 2015-12-08   30 

내 첫번째 생각은 (이 근무) 다음과 같이 .apply 사용하는 것이 었습니다 :

일을하지만, 상당히 느린
def f(x):  
    return x['ship_date'] + timedelta(days=x['days_supply']) 

df['ship_date'] = pd.to_datetime(df['ship_string']) 

df['supply_ended'] = df.apply(f,axis = 1) 

. 질문에 대한 답변으로 아래에 대체 해결책을 게시했지만 "우수 사례"라는 확인을 받고 싶습니다. 나는 팬더의 날짜에 timedelta 컬럼을 추가하는 데 많은 좋은 스레드를 찾을 수 없었습니다 (특히 벡터화 된 방식으로), 그래서 조금 더 사용자 친화적 인 것을 추가하고 다음 가난한 영혼이 도움이 될 것이라고 생각했습니다. 이 작업을 수행.

답변

3

전체 코드 솔루션 :

import pandas as pd 
from datetime import timedelta 

df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]], 
         columns = ['ship_string','days_supply']) 

df['ship_date'] = pd.to_datetime(df['ship_string']) 

df['time_added'] = pd.to_timedelta(df['days_supply'],'d') 
df['supply_ended'] = df['ship_date'] + df['time_added'] 

print df 

    ship_string days_supply ship_date time_added supply_ended 
0 2016-01-10   28 2016-01-10  28 days 2016-02-07 
1 2016-05-11   28 2016-05-11  28 days 2016-06-08 
2 2016-02-23   15 2016-02-23  15 days 2016-03-09 
3 2015-12-08   30 2015-12-08  30 days 2016-01-07 

이 좋은 벡터화 된 솔루션이 아닌 경우 나 아래 댓글에 알려 주시기 바랍니다 그리고 난 편집 할 수 있습니다.

+0

좋은 해결책입니다. 한 줄 더 좋을 수도 있습니다. df [ 'supply_ended'] = pd.to_datetime (df [ 'ship_string']) + pd.to_timedelta (df [ 'days_supply'], 'd')', 새 열을 만들 필요가없는 경우 – jezrael

+0

Series에서 'DateOffset' 기능을 사용할 수 없으므로'pd.to_timedelta' 함수를 찾을 수 없습니다. 솔루션을 게시 해 주셔서 감사합니다! – FlorianGD