[D-6] DataFrame 인덱싱 헷갈리는 포인트 정리

2026. 6. 26. 19:19·AI
반응형

 

edit_note 오늘 코테 문제
문제 이웃한 칸 (Lv.1)
플랫폼 프로그래머스
난이도 Lv. 1
핵심 요구사항 board[h][w]와 상하좌우 이웃 칸 중 같은 색으로 칠해진 칸의 개수 반환
python
def solution(board, h, w):
    answer = 0

    dh = [1, -1, 0, 0]
    dw = [0, 0, -1, 1]

    color = board[h][w]

    for i in range(4):
        h_check = dh[i] + h
        w_check = dw[i] + w

        if h_check < 0 or h_check >= len(board) or w_check < 0 or w_check >= len(board[0]):
            continue

        if color == board[h_check][w_check]:
            answer += 1

    return answer
시간복잡도 O(1) — 항상 최대 4방향만 탐색
풀이 접근법
이 문제의 핵심은 상하좌우 4방향을 탐색할 때 보드 경계를 벗어나는 경우를 걸러내는 것이다. 보드는 유한한 크기이므로 반드시 경계를 벗어나는 경우가 생기기 때문이다.
1
방향 벡터로 4방향 묶기
상하좌우를 일일이 if문으로 쓰는 대신, 방향 벡터 배열로 묶어서 반복문 하나로 처리한다. dh[i]와 dw[i]를 함께 쓰면 각각의 방향을 나타낸다.
python
dh = [1, -1, 0, 0]
dw = [0, 0, -1, 1]
color = board[h][w]
 
2
범위 체크 후 색 비교
이웃 좌표를 계산한 뒤 보드 밖이면 continue로 스킵한다. 범위 안에 있을 때만 기준 칸의 색과 비교해 같으면 카운트를 올린다.
python
for i in range(4):
    h_check = dh[i] + h
    w_check = dw[i] + w

    if h_check < 0 or h_check >= len(board) or \
       w_check < 0 or w_check >= len(board[0]):
        continue

    if color == board[h_check][w_check]:
        answer += 1
i 방향 h_check w_check
0 아래 h+1 w
1 위 h-1 w
2 왼쪽 h w-1
3 오른쪽 h w+1
방향 벡터 패턴을 쓰는 이유
✓4방향을 하드코딩하면 코드가 길어지고 확장이 어렵다. 방향 벡터는 루프 하나로 줄여주고 나중에 8방향·BFS/DFS로 확장할 때도 배열만 수정하면 된다.
한 줄 회고 방향 벡터 패턴은 BFS/DFS에서도 그대로 쓰인다 — 지금 익혀두면 나중에 편하다
 
menu_book 오늘 공부한 내용
학습 주제 Numpy, Pandas, Matplotlib 복습
참고 자료 [D-7] Numpy, Pandas, Matplotlib 한 번에 훑기
소요 시간 2시간
VSCode Copilot Inline Suggestions 끄기
VSCode에서 코드를 작성할 때마다 다음 내용을 추천하는 기능이 계속 거슬렸다. 과거 Xcode에서 앱 개발할 때도 비슷한 경험이 있었는데, VSCode 오른쪽 하단의 Copilot 아이콘에서 Inline Suggestions 기능을 끄니 훨씬 편해졌다. 나중에 익숙해지면 켜두는 게 생산성에 도움이 될 것 같지만, 지금은 코드 흐름에 집중하는 게 우선이다.
1. [] 단독 사용
[] 안에 슬라이스(:)가 들어오면 무조건 행 기준으로 동작한다. 컬럼 범위 슬라이싱은 불가.
문법 동작 예시
df['컬럼명'] 단일 컬럼 선택 df['protein']
df[['a', 'b']] 여러 컬럼 선택 df[['protein', 'fat']]
df[0:3] 행 슬라이싱 (정수) df[0:3]
df['a':'b'] 행 슬라이싱 (라벨) df['Whopper':'Whopper Junior']
2. .loc[행, 컬럼] 사용
컬럼 범위 슬라이싱은 반드시 .loc[:, 'start':'end'] 형태로 써야 한다.
문법 동작
df.loc['a':'b'] 행 라벨 슬라이싱
df.loc[:, 'protein':'fat'] 컬럼 범위 슬라이싱
df.loc['a':'b', 'protein':'fat'] 행 + 컬럼 동시 슬라이싱
3. 컬럼 추가 vs 행 추가
목적 문법
컬럼 추가/수정 df['new_col'] = 값
행 추가/수정 df.loc['new_row'] = 값
[] 단독으로는 항상 컬럼만 건드릴 수 있고, 행 추가/수정은 반드시 .loc 필요.
4. 불리언 인덱싱
df['calories'] >= 500처럼 컬럼을 재료로 써서 True/False Series를 만들고, 이걸 .loc에 넣으면 True인 행만 필터링한다.
python
# .loc[행 조건, 컬럼명] = 값
burger_df.loc[burger_df['calories'] >= 500, 'high_calorie'] = True
# "칼로리 500 이상인 행들의 high_calorie 컬럼에 True를 써라"
# high_calorie 컬럼이 없으면 새로 생성, 조건 안 맞는 행은 NaN
헷갈리는 포인트
❌ df['protein':'fat'] → 컬럼 범위가 나올 것 같지만 실제로는 행 슬라이싱으로 동작해서 protein이 행 인덱스에 없으면 KeyError
✅ df['Whopper':'Whopper Junior'] → 버거 이름이 행 인덱스라 행 슬라이싱으로 동작함
✅ 컬럼 범위 슬라이싱은 반드시 df.loc[:, 'protein':'fat'] 으로 써야 한다
오늘의 키포인트
1[]에 슬라이스가 들어오면 무조건 행. 컬럼 범위는 반드시 .loc[:, 'a':'b'].
2행 추가는 .loc 필수. [] 단독으로는 컬럼만 건드릴 수 있다.
3불리언 Series는 컬럼으로 만들어서 행 필터로 쓰는 것. .loc[행 조건, 컬럼명]으로 조건에 맞는 행의 특정 컬럼에 값을 할당할 수 있다.
 
psychology 오늘 들었던 생각

Copilot inline suggestions를 끄고 나서 확실히 코드 작성에 집중이 잘 됐다. 익숙해지기 전에는 도구가 오히려 방해가 된다는 걸 느꼈다. Pandas 인덱싱은 규칙이 일관된 것 같으면서도 [] 단독이냐 .loc이냐에 따라 동작이 달라져서 헷갈렸는데, "슬라이스가 들어오면 행"이라는 규칙 하나로 정리되니 훨씬 깔끔하게 정리됐다.

 
rate_review 마무리
방향 벡터 패턴과 Pandas 인덱싱 규칙 — 둘 다 "규칙 하나를 제대로 이해하면 나머지가 자연스럽게 풀린다"는 걸 느낀 하루.
 
checklist 내일 할 일
  •  
    프로그래머스 문제 한 개 풀기
  •  
    기초 통계와 데이터 시각화 듣기
반응형

'AI' 카테고리의 다른 글

[D-3] 시각화 도구 3종 비교  (0) 2026.06.29
[D-4] seaborn으로 상관관계 보기  (0) 2026.06.28
[D-5] 통계 기초 완주 — 박스 플롯부터 누적값까지  (0) 2026.06.27
[D-7] Numpy, Pandas, Matplotlib 한 번에 훑기  (0) 2026.06.25
[D-8] 코드잇 스프린트 시작 전, 파이썬 워밍업  (0) 2026.06.24
'AI' 카테고리의 다른 글
  • [D-4] seaborn으로 상관관계 보기
  • [D-5] 통계 기초 완주 — 박스 플롯부터 누적값까지
  • [D-7] Numpy, Pandas, Matplotlib 한 번에 훑기
  • [D-8] 코드잇 스프린트 시작 전, 파이썬 워밍업
Riu
Riu
안녕하세요 iOS 개발자를 꿈꾸는 Riu입니다. Github: woolnd
  • Riu
    Riu 개발노트
    Riu
  • 전체
    오늘
    어제
    • 분류 전체보기 (44) N
      • AI (16) N
      • iOS 개발 (21)
        • SwiftUI (9)
        • UIKit (6)
        • Combine (5)
        • Architecture (1)
      • 알고리즘 (1)
      • 회고록 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    figma
    SwiftUI
    AI부트캠프
    cleanArchitecture
    UIKit
    코드잇스프린트
    SWIFT
    구름톤유니브
    회고록
    AI엔지니어취업
    ios
    AI엔지니어
    Combine
    Ai
    막자알림서비스
    ios개발
    나만의todo
    앗차!
    코드잇스프린트잇
    SWIF
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Riu
[D-6] DataFrame 인덱싱 헷갈리는 포인트 정리
상단으로

티스토리툴바