(타임 스탬프), (str) 및 (부울)의 df
3 개 열 이있는 데이터 프레임 이 있습니다. 각 행에 대해이 행 또는이 ID의 연대순 다음 두 행 중 하나가 빨간색인지 확인하는 또 다른 부울 열을 추가하고 싶습니다. (이 행 뒤에 동일한 ID의 행이 두 개 미만이면 보유한 행만 고려합니다.)time
id
red
이를 수행하는 우아한 방법은 무엇입니까? 내 접근 방식 은 우아하지 않았습니다. 시간별로 정렬하고라는 빈 목록을 만들고 by의 new_col
모든 행에 대해 루프를 채웠습니다 df
.
( for row_number in xrange(len(df)-2)...
)
사용 iloc
하고 입력 한 df['col']=new_col
. 이것은 느리고 읽기 어렵습니다.
먼저 타임 스탬프별로 정렬한다고 가정하면 ID별로 그룹화하고 각 그룹에 대해 red
한 번과 두 번 값을 이동 하고 논리 또는 결과를 찾을 수 있습니다.
df['col'] = df.red.groupby(df.id).apply(lambda g: g | g.shift(-1) | g.shift(-2))
예를 들면 :
In [100]: df = pd.DataFrame({'red': [True, True, True, False, False, True, True, True], 'id': [0] * 6 + [1] * 2})
In [101]: df.red.groupby(df.id).apply(lambda g: g | g.shift(-1) | g.shift(-2))
Out[101]:
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
Name: red, dtype: bool
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다