[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Medium) 585. Investments in 2016

잰잰' 2025. 6. 27. 17:32
Table: Insurance

+-------------+-------+
| Column Name | Type  |
+-------------+-------+
| pid         | int   |
| tiv_2015    | float |
| tiv_2016    | float |
| lat         | float |
| lon         | float |
+-------------+-------+

pid는 이 테이블의 기본 키(고유한 값을 갖는 열)입니다.
이 테이블의 각 행은 하나의 보험에 대한 정보를 포함하며 다음과 같습니다:
pid는 보험 가입자의 보험 ID입니다.
tiv_2015는 2015년의 총 투자 가치이고, tiv_2016은 2016년의 총 투자 가치입니다.
lat는 보험 가입자의 도시의 위도입니다. lat는 NULL이 아님이 보장됩니다.
lon은 보험 가입자의 도시의 경도입니다. lon은 NULL이 아님이 보장됩니다.

 

문제

다음 조건을 만족하는 모든 보험 가입자에 대해 2016년 총 투자 가치(tiv_2016)의 합을 보고하는 해결책을 작성하십시오:

  • tiv_2015 값이 하나 이상의 다른 보험 가입자와 동일해야 합니다.
  • 다른 어떤 보험 가입자와도 동일한 도시에 위치하지 않아야 합니다 (즉, (lat, lon) 속성 쌍이 고유해야 합니다).

tiv_2016은 소수점 둘째 자리까지 반올림하십시오.

결과 형식은 다음 예시를 따르십시오.

Example 1:

Input: 
Insurance table:
+-----+----------+----------+-----+-----+
| pid | tiv_2015 | tiv_2016 | lat | lon |
+-----+----------+----------+-----+-----+
| 1   | 10       | 5        | 10  | 10  |
| 2   | 20       | 20       | 20  | 20  |
| 3   | 10       | 30       | 20  | 20  |
| 4   | 10       | 40       | 40  | 40  |
+-----+----------+----------+-----+-----+
Output: 
+----------+
| tiv_2016 |
+----------+
| 45.00    |
+----------+

설명 :
테이블의 첫 번째 레코드는 마지막 레코드와 마찬가지로 두 가지 조건을 모두 만족합니다.
tiv_2015 값 10은 세 번째 및 네 번째 레코드와 동일하며, 해당 위치는 고유합니다.

두 번째 레코드는 두 가지 조건 모두를 만족하지 않습니다. tiv_2015 값은 다른 어떤 보험 가입자와도 같지 않고, 위치는 세 번째 레코드와 동일하여 세 번째 레코드도 조건을 만족하지 못하게 됩니다.
따라서 결과는 첫 번째 및 마지막 레코드의 tiv_2016 합계인 45가 됩니다.

 

✏️  풀이

import pandas as pd

def find_investments(insurance: pd.DataFrame) -> pd.DataFrame:
    df_2015 = insurance[insurance.duplicated(subset = 'tiv_2015', keep = False)]
    df_lat_lon = insurance.drop_duplicates(subset=['lat', 'lon'], keep = False)

    result = pd.merge(df_2015, df_lat_lon, how='inner')
    result = result['tiv_2016'].sum().round(2)

    return pd.DataFrame([result], columns=['tiv_2016'])

1. tiv_2015 값이 하나 이상의 다른 보험 가입자와 동일한 가입자 찾기

2. 동일한 도시에 위치한 가입자 제거

3. 1, 2번 데이터에서 공통 된 데이터 찾기

4. tiv_2016 합 구하기

5. 데이터프레임으로 변환하여 리턴