2017-11-27 2 views
1

팬더 데이터 프레임의 각 행을 반복하고 특정 셀의 값을 이전 행의 동일한 셀과 비교하려고합니다. .shift()을 사용하여이 작업을 수행 할 수 있다고 상상했지만 셀 값 대신 시리즈를 반환합니다.데이터 프레임 셀 값을 이전 셀 값과 비교

셀의 값을 액세스하지만 반복 비교가 아닌 어떤 카운터 방법을 사용하거나 각 셀의 값을 수동으로 저장 한 다음 비교하는 것이 좋지는 않은 것으로 보아 어떤 사용을 보았습니다 실력 있는.

내가 생각하기에 이것은 상상할 수 있지만 기쁨은 아닙니다.

for index, row in df.iterrows(): 
    if row['apm'] > df['apm'].shift(1): 
     # do something 
+0

#do something 섹션에서 무엇을하고 싶습니까? – angelwally

+0

'# do something'은 무엇을하고 있습니까? 이것은'df.apm.diff()> 0' –

+0

@ cᴏʟᴅs checking를 검사함으로써 벡터화 될 수 있습니다.이 경우 값을 새로운 열로 설정하고 있습니다. 나는 그것이 이전 값보다 높거나, 더 낮거나 같은지를 결정하고 그에 따라 라벨을 붙인다. – nghs

답변

0

당신은 부울 검사가 사실 여부를 표시하는 새 열 (예를 들어, flag)를 만들 수 있습니다.

df = df.assign(flag=df['apm'].gt(df['apm'].shift())) 

그런 다음이 열의 값을 기반으로 작업을 수행 할 수 있습니다.

+1

'df.apm.diff(). gt (0)'...하지만 문제는 OP가 거기에서 무엇을하고 있는지입니다 ... –

+0

엄청나게 빠릅니다. 어느 버전이 더 주관적인 것인지 분명합니다. – Alexander

+0

나를 위해 몇 가지 새로운 것들이 있습니다, 그걸 파헤 치고 당신에게 돌아가도록하겠습니다. 고마워요! – nghs

0
df['apm'].shift(1) 

은 첫 번째 행에서 없음을 제외하고 각 행에 이전 값이있는 계열을 반환합니다. 따라서 코드

df['apm'] > df['apm'].shift(1) 

또한 boolen 값 True 또는 각 행 False와 시리즈를 리턴한다. 그게 당신의 작업에 충분합니까?

+0

두 행 모두에서 동일한 열의 셀을 비교합니까? 그렇다면 작동 할 것이지만 전체 행과 이전 행을 비교하는 경우 작동하지 않을 것입니다. – nghs

관련 문제