이것은 내 DataFrame입니다.
max hits
0 NaN NaN
1 NaN NaN
2 NaN True (bad)
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 True NaN
7 NaN True (good)
8 NaN NaN
9 NaN NaN
10 NaN True (good)
11 True NaN
12 NaN NaN
13 NaN NaN
'적중'열의 True 값이 '최대'열의 True 값과 얼마나 가까운 지 계산하고 싶습니다. 근접 기준은 두 단계 위로, 두 단계 아래로입니다. 그래서 제 예에서 대답은 2입니다.
이제 나는 이렇게 계산합니다.
# get indexes of True values in hits column
indexes = df.dropna(subset = ['hits']).index
count = 0
for index in indexes:
df_slice = df_work.iloc [index-2 : index+2+1].dropna(subset = ['max'])
if len(df_slice) > 0:
count += 1 # True in 'hits' is close to True value in 'max'
예상대로 작동하지만 매우 느립니다. 내 DataFrame은 매우 크고 많은 시간을 잃었습니다. 더 빠른 방법이 있습니까?
- 답변 # 1
- 답변 # 2
# 테스트 컬럼 소개
df=df.assign(test=df.sum(1).replace(0, np.nan).fillna(method='ffill',limit=2)) #Create Condition and Choices cond=[df.hits.notna()&df['test'].ne(df['test'].shift(3)),df.hits.notna()&df['test'].eq(df['test'].shift(3))] choices=['bad','good'] #Update staus using np.where df['status']=np.select(cond,choices,'') print(df) max hits test status 0 NaN NaN NaN 1 NaN NaN NaN 2 NaN True 1.0 bad 3 NaN NaN 1.0 4 NaN NaN 1.0 5 NaN NaN NaN 6 True NaN 1.0 7 NaN True 1.0 good 8 NaN NaN 1.0 9 NaN NaN 1.0 10 NaN True 1.0 good 11 True NaN 1.0 12 NaN NaN 1.0 13 NaN NaN 1.0
관련 자료
- python - Pandas에서 열을 셀 값으로 사용
- python - Pandas 데이터 프레임의 새 열을 만들고 셀 값의 값을 삽입하는 방법
- python - Pandas의 다른 열에서 동일한 값 찾기
- pandas csv 열의 값 스타일 파이썬 변경
- python - Pandas groupby를 사용하지만 다른 열의 순서를 유지 한 다음 그룹 내에서 이동
- python 3.x - pandas df에서 삭제하지 않고 하나의 열을 제외하고 pandas의 열 값을 바꿉니다
- python - Pandas에서 idxmax로 중복 값 유지
- python - 판다 - 새 열 데이터를 기반으로 열 값을 찾는 방법
- Pandas/Python에서 한 지점부터 모든 열 결합
- python - Pandas에서 정규식을 사용하여 특정 열에서만 열 값 바꾸기
- Pandas Dataframe - pandas 데이터 프레임 - 열 값을 기준으로 그룹화하고 다른 열의 값을 조회합니다
- python - 두 열 사이의 거리를 계산하고 팬더를 그리는 방법
- python - 일부 열에서 동일한 값을 갖는 값을 결합하는 방법
- python - Pandas 데이터 프레임의 각 행을 복제하고 목록을 기반으로 일부 열의 값을 변경합니다
- python - 목록 및 필터의 Pandas groupby 열 값
- python - 새 값 및 열을 제자리에 추가
- dataframe - df1의 여러 열 요소를 R의 array1 값과 일치시키는 방법은 무엇입니까?
- python - 여러 팬더 열을 문자열 부울에서 부울로 변환하는 방법은 무엇입니까?
- python - 모든 행 값 양수, 한 행 값 음수, 두 행 값 음수… 및 모든 행 값 음수를 기준으로 Pandas 데이터 프레임을 정렬하는 방법,
해보자
bfill/ffill
와limit
: