susinlee 님의 블로그
Game Play Analysis IV 본문
[문제]
https://leetcode.com/problems/game-play-analysis-iv/description/
[풀이]
1. player_id 별로 첫 로그인 날짜를 구하고
2. player_id 별로 로그인 날짜가 첫 로그인 날짜보다 하루 뒤인 행의 개수를 구한다
3. 전체 player_id 고유값으로 나눈다.
Pandas
def gameplay_analysis(activity: pd.DataFrame) -> pd.DataFrame:
activity['first'] = activity.groupby('player_id').event_date.transform(min)
activity_second = activity[activity['first'] + pd.DateOffset(1) == activity['event_date']]
return pd.DataFrame({"fraction" : [round(len(activity_second)/activity.player_id.nunique(), 2)]})
- transform() 함수는 그룹화 전 데이터프레임의 행의 개수를 유지한 채로 전달한 함수를 적용해서 값을 채워넣는다.
- pd.DateOffset() 함수는 특정 간격만큼 날짜를 이동시키는 객체를 생성한다.
SQL
SELECT
ROUND(COUNT(player_id)/ (SELECT COUNT(DISTINCT player_id) FROM Activity), 2) AS fraction
FROM
Activity
WHERE
(player_id, DATE_SUB(event_date, INTERVAL 1 DAY)) IN (SELECT player_id, MIN(event_date)
FROM Activity
GROUP BY player_id)
'코드카타 > Pandas' 카테고리의 다른 글
101. Product Sales Analysis III (0) | 2025.01.06 |
---|---|
100. User Activity for the Past 30 Days I (0) | 2025.01.05 |
Immediate Food Delivery II (0) | 2024.12.31 |
Monthly Transactions I (0) | 2024.12.30 |
Queries Quality and Percentage (1) | 2024.12.27 |