LeetCode1148题——文章浏览|
一、题目
此表可能会存在重复行。(换句话说,在 SQL 中这个表没有主键)
此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
请注意,同一人的 author_id 和 viewer_id 是相同的。
请查询出所有浏览过自己文章的作者,结果按照 id 升序排列。
二、官方题解与思路整理
行过滤法思路:
①找到判断作者是否评论了自己文章的条件,即 author_id 等于 viewer_id。根据此条件过滤所有 views 行,并确定满足条件的行。
②可能会在 author_id 列(例如,author_id = 4 的作者查看了他的文章多次)中遇到重复的作者,需要删除重复项。
③将 author_id 列重命名为id并按升序排序。
官方题解:
import pandas as pd
def article_views(views: pd.DataFrame) -> pd.DataFrame:
df = views[views['author_id']==views['viewer_id']]#仅选择满足条件的行
#仅保留包含唯一的'author_id'的行
df.drop_duplicates(subset=['author_id'],inplace=True)
#按'author_id'列升序排序DataFrame
df.sort_values(by=['author_id'],inplace=True)
#将'author_id'列重命名为'id'
df.rename(columns={
'author_id':'id'},inplace=True)
df=df[['id']]
return df
三、自己的记录
1、布尔索引允许我们通过使用布尔数组或条件来过滤 DataFrame。可以使用布尔值的 Series 或创建对于 DataFrame 中每一行都评估为 True 或 False 的条件。通过将这些布尔值或条件应用为 DataFrame 的索引,可以选择性地提取满足条件的行。
2、过滤后可能会在 author_id 列(例如,author_id = 4 的作者查看了他的文章多次)中遇到重复的作者。drop_duplicates() 方法可以选择不重复的 author_ids,即移除任何重复项。
3、drop_duplicates()方法的参数设置
①subset:它指定应该考虑哪些列来查找重复项。如果未指定,将使用 DataFrame 中的所有列来识别重复项。在我们的情况下,我们将其设置为 ['author_id'] ,因此仅考虑author_id列中的重复项。
②inplace:这是一个布尔参数,用于确定方法是否应该对原始 DataFrame 进行就地修改,还是返回一个删除了重复项的新 DataFrame。我们将其设置为 True,表示原地修改。