본문 바로가기

전체 글

(81)
[Pandas] shift란? Pandas에서 제공하는 기능 중 shift라는 기능이 있다. 우리가 알고 있는 의미 그대로 '이동시키다'라고 해석하면 어떤 기능인지 잘 와닿을 것 같다! 말 그대로 현재 데이터를 n칸 씩 앞으로 또는 뒤로 손쉽게 밀 수 있다. 공식 문서에 있는 예제를 살펴보자. 아래와 같은 예시의 데이터 프레임이 있을 때 >>> df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45], ... "Col2": [13, 23, 18, 33, 48], ... "Col3": [17, 27, 22, 37, 52]}, ... index=pd.date_range("2020-01-01", "2020-01-05")) >>> df Col1 Col2 Col3 2020-01-01 10 13 17 2020-01-..
[Pandas] groupby 사용법 이해하기 Pandas에서 groupby는 데이터를 이해하고 분석할 때 굉장히 편리하고 좋은 도구입니다! 굉장히 많이 쓰이는 기능임에도 의외로 사용법이 쉽게 이해가 되지는 않습니다. 최근 부스트캠프에서 groupby를 굉장히 이해하기 쉽게 설명해주신 것이 있어 정리 및 공유해보려고 합니다! 우선 groupby의 가장 기본적인 사용법은 다음과 같습니다. (데이터프레임).groupby(분리할KEY).agg({합치고싶은특성: 어떻게합칠지, ...}) 예를 들어보자면, 만약 어떤 고객이 어떤 물건을 구매했는지에 대한 구매이력 데이터프레임이 우리에게 있다고 가정해봅시다. 여기서 각 고객 별로 몇 개의 물건을 구매했는지 살펴보고 싶다면, df.groupby("userID").agg({"buy": "count"}) 이렇게 되는..
[Python] dictionary 타입에서 default 값 가져오기 파이썬에서 사용하는 데이터 타입 중에는 "dictionary(딕셔너리)"라는 데이터 타입이 있습니다. 우리가 사전을 볼 때 단어를 찾으면 단어의 의미가 사전에 적혀있는 것과 동일한 형태의 데이터 구조라고 생각하면 됩니다. 다음은 과일이라는 key값을 찾아가면 가격이라는 value를 담고 있는 딕셔너리의 예제입니다. fruits = {"apple" : 1000, "banana" : 1500, "strawberry" : 500} 이번 글에서는 딕셔너리의 default 값에 대하여 간단하게 정리하겠습니다! 딕셔너리를 사용하여 코드를 짜다보면 종종 딕셔너리에서 값을 가져올 때 해당하는 키 값이 딕셔너리에 없는 경우가 있습니다. 없는 키에 접근을 하면 당연히 value를 불러 올 수 없습니다. 그렇다면 딕셔너리에..
[BOJ] 7576. 토마토 (Python) 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 오랜만에 보는 토마토 문제~! 정말 대표적인 BFS 문제라고 할 수 있다. from collections import deque def solution() : M, N = map(int, input().split()) dxy = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 이동 방향 q = deque([]) tomatoes = [] for row in range(N) : tomato = list(map(int, input()..
[Programmers] 타겟 넘버 (Python) 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 예전에 풀었던 BFS / DFS를 오랜만에 다시 풀어봤다! 주어진 숫자로 타겟 넘버를 만드는 방법이 몇가지 있는지 세보는 문제이다. 이때 주어진 숫자의 순서는 바꿀 수가 없다! 방법은 간단하다. 앞에서부터 순서대로 더하거나 빼는 케이스를 해보고, 타겟 넘버가 되는 케이스를 세어주면 된다. 1) BFS 풀이 def bfs(start) : answer = 0 q = deque([]) q.append((numbers[start], start))..
[Programmers] 2019 카카오 개발자 겨울 인턴십 - 튜플 (Python) 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 문자열 다루는 문제! 집합 길이별로 정렬해서 새로 추가 된 숫자를 순서대로 정답 리스트에 넣어주면 된다!! def solution(s): answer = [] s = s[1:-1] # 대괄호 제거 s = ''.join(s.split('{')).split('}')[:-1] # 집합 분리 set_dict = dict() # 길이 별 집합 저장 for i in s : if i[0] == "," : i = i[1:] ..
[Programmers] 큰 수 만들기 (Python) 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 오랫동안 못 풀었던 큰 수 만들기 문제! 오랜만에 도전했더니 생각보단(?) 금방 해결해서 기분이 좋다! 그리디 = 매 순간 최선의 선택을 하는 문제! 라는 것에 집중하면 문제 해결방법을 금방 생각해낼 수 있다. 가장 큰 수를 만들기 위해서 매 순간 할 수 있는 가장 최선의 선택은 무엇일까? 큰 수의 조건은 무엇인가!? 일단 큰 수가 되려면 무조건 맨 앞자리 숫자가 가장 커야한다. 따라서 앞에서부터 비교했을 때 현재 자릿수 숫자 < 다음 자릿 수 숫자 이면 현재 자릿수의 숫자를 제거하는 것이 바람직하다는 것! 또한 제거하고나서 매번 처음부터 다시 비교하면 시간초과가 나므로 제거한 숫자 전 바로 이전 자릿수부터 다시 비교해야한다. 이전 자릿수..
[Programmers] 이진 변환 반복하기 (Python) 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 주어진 이진 숫자에서 0을 제거하고, 제거한 숫자의 길이를 다시 이진 변환하고.. 숫자가 1이 될 때까지 이 과정을 반복하는 문제이다! 1이 될 때까지 몇 개의 0을 제거했고, 몇 단계를 거쳤는지 리턴해주면 끝! def solution(s): answer = [] cnt = 0 # 제거한 0의 개수 step = 0 # 회차 while s != "1" : step += 1 new_s = len(''.join(s.split("0"))) cnt += len(s) - new_s s = "" while new_s != 1 and new_s != 0 : s = str(new_s % 2) + s new_s //= 2 s = str(new_s) +..