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. 데이터프레임으로 변환하여 리턴
'[코딩테스트] > [Pandas]' 카테고리의 다른 글
[LeetCode - Pandas] (Medium) 570. Managers with at Least 5 Direct Reports (0) | 2025.06.27 |
---|---|
[LeetCode - Pandas] (Medium) 550. Game Play Analysis IV (0) | 2025.05.29 |
[LeetCode - Pandas] (Medium) 184. Department Highest Salary (1) | 2025.05.29 |
[LeetCode - Pandas] (Medium) 180. Consecutive Numbers (1) | 2025.05.28 |
[LeetCode - Pandas] (Medium) 178. Rank Scores (1) | 2025.05.28 |