Skip to main content
Back to problems
#578
Medium Database

Get highest answer rate question

Database
40.0% acceptance
Mar 31, 2026
136
921

No description available.

Solution

Pandas
Time O(n)
Space O(1)
LeetCode
solution.pandas
# Table: SurveyLog
#
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | id          | int  |
# | action      | ENUM |
# | question_id | int  |
# | answer_id   | int  |
# | q_num       | int  |
# | timestamp   | int  |
# +-------------+------+
# This table may contain duplicate rows.
# action is an ENUM (category) of the type: "show", "answer", or "skip".
# Each row of this table indicates the user with ID = id has taken an action with the question question_id at time timestamp.
# If the action taken by the user is "answer", answer_id will contain the id of that answer, otherwise, it will be null.
# q_num is the numeral order of the question in the current session.
#
#
#
# The answer rate for a question is the number of times a user answered the question by the number of times a user showed the question.
#
# Write a solution to report the question that has the highest answer rate. If multiple questions have the same maximum answer rate, report the question with the smallest question_id.
#
# The result format is in the following example.
#
# Example 1:
# Input:
# SurveyLog table:
# +----+--------+-------------+-----------+-------+-----------+
# | id | action | question_id | answer_id | q_num | timestamp |
# +----+--------+-------------+-----------+-------+-----------+
# | 5  | show   | 285         | null      | 1     | 123       |
# | 5  | answer | 285         | 124124    | 1     | 124       |
# | 5  | show   | 369         | null      | 2     | 125       |
# | 5  | skip   | 369         | null      | 2     | 126       |
# +----+--------+-------------+-----------+-------+-----------+
# Output:
# +------------+
# | survey_log |
# +------------+
# | 285        |
# +------------+
# Explanation:
# Question 285 was showed 1 time and answered 1 time. The answer rate of question 285 is 1.0
# Question 369 was showed 1 time and was not answered. The answer rate of question 369 is 0.0
# Question 285 has the highest answer rate.

import pandas as pd


def get_the_question(survey_log: pd.DataFrame) -> pd.DataFrame:
  answers = survey_log[survey_log["action"] == "answer"].groupby("question_id").size()
  shows = survey_log[survey_log["action"] == "show"].groupby("question_id").size()
  if shows.empty:
    return pd.DataFrame({"survey_log": []})
  rate = (answers / shows).fillna(0)
  best = rate.idxmax()
  return pd.DataFrame({"survey_log": [best]})