2016-08-23 3 views
0

이것은 쉬운 방법 일 것이라고 확신하지만 현재 열의 값보다 큰 열의 최소값을 찾는 방법은 무엇입니까? 또한 현재 열의 값보다 적은 열의 최대 값을 찾는 방법은 무엇입니까? 그래서 .. 예현재 열보다 큰 다른 열의 최소값을 찾는 방법 Pandas

from io import StringIO 
import io 

text = """Order starttime    endtime 
1  2016-03-01 14:31:10.777 2016-03-01 14:31:10.803 
1  2016-03-01 14:31:10.779 2016-03-01 14:31:10.780 
1  2016-03-01 14:31:10.790 2016-03-01 14:31:10.791 
1  2016-03-01 14:31:10.806 2016-03-01 14:31:10.863""" 

df = pd.read_csv(StringIO(text), sep='\s{2,}', engine='python', parse_dates=[1, 2]) 

.. endtime에 럼 는, 그 큰 값이다 STARTTIME 컬럼의 최소값을 원한다.

endtime 2016-03-01 14 : 31 : 10.803 (첫 번째 값) 과 연결된 값은 2016-03-01 14 : 31 : 10.806 (startdatetime의 마지막 값)입니다.

2016년 3월 1일 (14)와 관련된 값 : 31 : 31 : 10.780 (제 종료 시각)을 2016년 3월 1일 14이어야

(의사)에 따라서 기본적 10.790

DF는 [ 'nexttime는'] 내가

을 나보다이 사람을 숙련 아주 쉽게 확신 해요 .. 어떤 도움을 주셔서 감사합니다겠습니까 [ '종료 시각']

df 명령> ([ 'STARTTIME'] DF) 분 =

답변

1

다음과 같이 시도해보세요.

df.endtime.apply(lambda x: min(df.starttime[df.starttime > x]) if len(df.starttime[df.starttime > x]) != 0 else np.nan) 

# 0 2016-03-01 14:31:10.806 
# 1 2016-03-01 14:31:10.790 
# 2 2016-03-01 14:31:10.806 
# 3      NaT 
# Name: endtime, dtype: datetime64[ns] 

또는 약간 더 효율적인 방법은 :

def findMin(x): 
    larger = df.starttime[df.starttime > x] 
    if len(larger) != 0: 
     return min(larger) 
    else: 
     return np.nan 

df.endtime.apply(findMin) 

# 0 2016-03-01 14:31:10.806 
# 1 2016-03-01 14:31:10.790 
# 2 2016-03-01 14:31:10.806 
# 3      NaT 
# Name: endtime, dtype: datetime64[ns] 

아마도 벡터 스캔을 피하는 방법이 있지만, 성능이 큰 문제가 아닌 경우,이 작동합니다.

+0

굉장 .. 고맙습니다. –

관련 문제