[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1587. Bank Account Summary II

잰잰' 2025. 4. 14. 13:09
Table: Users

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| account      | int     |
| name         | varchar |
+--------------+---------+

account는 이 테이블의 기본 키(고유한 값을 가지는 열)입니다.
이 테이블의 각 행은 은행에서 각 사용자의 계좌 번호를 포함합니다.
이 테이블에는 같은 이름을 가진 두 사용자는 존재하지 않습니다.

Table: Transactions

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| trans_id      | int     |
| account       | int     |
| amount        | int     |
| transacted_on | date    |
+---------------+---------+

trans_id는 이 테이블의 기본 키(고유한 값을 가지는 열)입니다.
이 테이블의 각 행은 모든 계좌에 발생한 모든 변경 사항을 포함합니다.
amount는 사용자가 돈을 받았을 경우 양수이고, 돈을 이체했을 경우 음수입니다.
모든 계좌는 잔고 0으로 시작합니다.

 

문제

잔고가 10000보다 큰 사용자의 이름과 잔고를 조회하는 해결 방법을 작성하세요.
계좌의 잔고는 해당 계좌와 관련된 모든 거래의 amount 합계와 같습니다.

결과 테이블은 임의의 순서로 반환합니다.

결과 형식은 다음 예시와 같습니다.

Example 1:

Input: 
Users table:
+------------+--------------+
| account    | name         |
+------------+--------------+
| 900001     | Alice        |
| 900002     | Bob          |
| 900003     | Charlie      |
+------------+--------------+
Transactions table:
+------------+------------+------------+---------------+
| trans_id   | account    | amount     | transacted_on |
+------------+------------+------------+---------------+
| 1          | 900001     | 7000       |  2020-08-01   |
| 2          | 900001     | 7000       |  2020-09-01   |
| 3          | 900001     | -3000      |  2020-09-02   |
| 4          | 900002     | 1000       |  2020-09-12   |
| 5          | 900003     | 6000       |  2020-08-07   |
| 6          | 900003     | 6000       |  2020-09-07   |
| 7          | 900003     | -4000      |  2020-09-11   |
+------------+------------+------------+---------------+
Output: 
+------------+------------+
| name       | balance    |
+------------+------------+
| Alice      | 11000      |
+------------+------------+

설명 :
Alice의 잔고는 (7000 + 7000 - 3000) = 11000입니다.
Bob의 잔고는 1000입니다.
Charlie의 잔고는 (6000 + 6000 - 4000) = 8000입니다.

 

✏️ 풀이

import pandas as pd

def account_summary(users: pd.DataFrame, transactions: pd.DataFrame) -> pd.DataFrame:
    result = transactions.groupby('account')['amount'].sum().reset_index(name = 'balance')
    result = pd.merge(users, result, how='inner', on='account')

    return result[result['balance'] > 10000][['name', 'balance']]

1. account별 총 합(잔고) 구하기

2. 1번에 user 정보 조인

3. 잔고가 10000보다 큰 유저 조회

 

간만에 헤매지 않고 한 번에 깔끔하게 풀었다👍