2013-08-08 2 views
2

숫자가있는 테이블이 있고 (일부 날짜는 NaN입니다) 가장 오래된 날짜를 찾아야합니다 행에 DATE_MODIFIED, WITHDRAWN_DATE, SOLD_DATE, STATUS_DATE 등.팬더 DF 행에서 최소 날짜 찾기 및 새 열 만들기

그래서 각 행에 대해 가장 오래된 필드를 찾고 데이터 프레임에 새 열을 만들고 싶습니다. 이 같은

뭔가, 난 그냥 하나를 수행하는 경우, 예를 들어 DATE 내가 결과를 얻을하지만

table['END_DATE']=min([table['DATE_MODIFIED']],[table['SOLD_DATE']]) 

아래로 두 번째를 추가 할 때 내가 얻을 수정일 : 그 문제에 대한

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

것 이 구조는 처음에 올바른 날짜 열을 만든다고 가정하고 최소 날짜를 찾으려고합니까?

답변

7

축 = 1을 따라 min 함수를 적용하면됩니다. table이 DataFrame입니다

In [1]: import pandas as pd 
In [2]: df = pd.read_csv('test.cvs', parse_dates=['d1', 'd2', 'd3']) 
In [3]: df.ix[2, 'd1'] = None 
In [4]: df.ix[1, 'd2'] = None 
In [5]: df.ix[4, 'd3'] = None 
In [6]: df 
Out[6]: 
        d1     d2     d3 
0 2013-02-07 00:00:00 2013-03-08 00:00:00 2013-05-21 00:00:00 
1 2013-02-07 00:00:00     NaT 2013-05-21 00:00:00 
2     NaT 2013-03-02 00:00:00 2013-05-21 00:00:00 
3 2013-02-04 00:00:00 2013-03-08 00:00:00 2013-01-04 00:00:00 
4 2013-02-01 00:00:00 2013-03-06 00:00:00     NaT 
In [7]: df.min(axis=1) 
Out[7]: 
0 2013-02-07 00:00:00 
1 2013-02-07 00:00:00 
2 2013-03-02 00:00:00 
3 2013-01-04 00:00:00 
4 2013-02-01 00:00:00 
dtype: datetime64[ns] 
+0

fyi 프레임에서''NaT''와 함께''np.max''를 사용하려고하면, 누락 된 값을 처리하는''df.min()/max()''를 사용하는 것이 더 잘 실패합니다 정확하게 – Jeff

+0

DF에서 축 인수를 만드는 방법은 다른 분야가 많으므로? like : table [ 'END_DATE'] = table.apply (np.min, [[DATE_MODIFIED ']], [table ['SOLD_DATE ']]]) ?? – dartdog

+0

실수로 예제를 업데이트하십시오. –

3

경우, 관련 컬럼에 그 min 방법을 사용하십시오

table['END_DATE'] = table[['DATE_MODIFIED','SOLD_DATE']].min(axis=1) 
+0

예, 위의 Viktor Kerkez가 제공 한 형식입니다. 의견에 감사합니다! – dartdog

+0

내 대답은 처음이었다;) –

+0

어떤 아이디어도 비교에서 단일 vaue 필드를 포함하는 방법? 예 : 테이블 [ 'END_DATE'] = 테이블 [[ 'DATE_MODIFIED', 'SOLD_DATE', 종료일]]. min (축 = 1) 여기서 end-date는 테이블의 일부가 아닌 일반 파이썬 가변입니다. – dartdog

1

약간의 변화를 펠릭스 Zumstein의 이상

table['END_DATE'] = table[['DATE_MODIFIED','SOLD_DATE']].min(axis=1).astype('datetime64[ns]') 

astype('datetime64[ns]')이 현재 필요하다 판다 (2015 년 7 월)의 버전으로 float64의 날짜 표시를 피할 수 있습니다.