2017-04-25 2 views
0

조건에 따라 DB의 여러 열을 업데이트해야합니다. 나는 numpy.where를 사용하고 있으며 변경하지 않는 것을 선호합니다. 그래서 다른 5 열 ..에 대한Python은 where와 함께 여러 열을 업데이트합니다. 오류를 함께 브로드 캐스트 할 수 없습니다.

DB['Start'] = np.where(((DB['Start Date']<=time_delta) | (DB['Start Date'].isnull()) | (DB['Start Date'] == "")),DB['Start'],DB['Start Date']) 

DB['End'] = np.where(((DB['Start Date']<=time_delta) | (DB['Start Date'].isnull()) | (DB['Start Date'] == "")),DB['End'],DB['End Date']) 

및 그러나 이것은 효율적인 계산되지 않을 것 : 여기

은 내가 할 수있는 것입니다.

는 다음과 같이해야 좋을 것이다 :

DB[['Start','End']] = np.where(((DB['Start Date']<=time_delta) | (DB['Start Date'].isnull()) | (DB['Start Date'] == "")),DB[['Start','End']],DB[['Start Date','End Date']]) 

을하지만 그것은 작동하지 않으며 다음과 같은 오류 메시지가 있습니다 : "피연산자 모양 (10)과 함께 방송 할 수없는 (10,2)를 (10,2).

numpy.where 조건에 따라 여러 열을 효율적으로 업데이트하는 방법에 대한 제안 사항이 있습니까?

+1

예제 데이터를 추가 하시겠습니까? – Divakar

+0

도움이 될지 모르겠지만 TID, 시작, 종료, M, B, TaskID, 시작 날짜, 종료 날짜, 시스템, 게시판의 DB 열입니다. 데이터의 경우이 테스트를 위해 임의의 데이터를 입력하기 만하면됩니다. 관련 없음 – Filippo

답변

0

컴퓨터 효율을 언급하고 수동으로 업데이트 단계를 나열하는 것과 동일한 컴퓨터 시간이 필요하기 때문에 이것이 받아 들여지면 확실하지 않습니다. 그러나 도움이 될 경우 ...

columns_to_filter = ['Start', 'End'] 

for c in columns_to_filter: 
    DB[c] = np.where(((DB['Start Date']<=time_delta) | (DB['Start Date'].isnull()) | (DB['Start Date'] == "")),DB[c],DB[c + ' Date']) 
+0

귀하의 의견에 감사드립니다. 그러나 더 많은 것을 최적화하기위한 코드가 필요했습니다. 나는 실제로 동일한 조건을 기반으로 업데이트 할 열이 10 개 있습니다. 그것을 다루는 더 효율적인 방법이 있어야합니다 ... – Filippo

관련 문제