- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Follow
+-------------+---------+ | Column Name | Type | +-------------+---------+ | followee | varchar | | follower | varchar | +-------------+---------+ (followee, follower) 是该表的主键(具有唯一值的列的组合)。 该表的每一行表示关注者关注了社交网络上的被关注者。 不会有用户关注他们自己。二级关注者 是指满足以下条件的用户:
- 关注至少一个用户,
- 被至少一个用户关注。
编写一个解决方案来报告 二级用户 及其关注者的数量。
返回按
follower
字典序排序 的结果表。结果格式如下所示。
示例 1:
输入: Follow table: +----------+----------+ | followee | follower | +----------+----------+ | Alice | Bob | | Bob | Cena | | Bob | Donald | | Donald | Edward | +----------+----------+ 输出: +----------+-----+ | follower | num | +----------+-----+ | Bob | 2 | | Donald | 1 | +----------+-----+ 解释: 用户 Bob 有 2 个关注者。Bob 是二级关注者,因为他关注了 Alice,所以我们把他包括在结果表中。 用户 Donald 有 1 个关注者。Donald 是二级关注者,因为他关注了 Bob,所以我们把他包括在结果表中。 用户 Alice 有 1 个关注者。Alice 不是二级关注者,但是她不关注任何人,所以我们不把她包括在结果表中。
三,建表语句
import pandas as pd
data = [['Alice', 'Bob'], ['Bob', 'Cena'], ['Bob', 'Donald'], ['Donald', 'Edward']]
follow = pd.DataFrame(data, columns=['followee', 'follower']).astype({'followee':'object', 'follower':'object'})
四,分析
题解:
表 关注表
字段 被关注者,关注者
求二级关注者的关注数量 结果按照关注着用户的升序排序
第一步: 找到 至少又被一人关注的 被关注者
# 我作为被关注着 我有关注过别人 是否在这列里面
df = follow[follow['followee'].isin(follow['follower'])]
df
第二步:简简单单的分组聚合 以被关注者分组 count 关注他的人数
#简简单单的分组聚合
df1 = df.groupby('followee').count().reset_index()
df1
第三步: 排序 并改名
#排序
res = df1.sort_values('followee')
res.columns=['follower','num']
res
五,Pandas解答
import pandas as pd
def second_degree_follower(follow: pd.DataFrame) -> pd.DataFrame:
# 我作为被关注着 我有关注过别人 是否在这列里面
df = follow[follow['followee'].isin(follow['follower'])]
#简简单单的分组聚合
df1 = df.groupby('followee').count().reset_index()
#排序
res = df1.sort_values('followee')
#改名
res.columns=['follower','num']
return res
second_degree_follower(follow)
六,验证
七,知识点总结
- Pandas中 多列判断的运用 API; isin方法
- Pandas中分组聚合的运用 API: groupby...count()
- Padans中重新生成索引的运用 API: reset_index()
- Pandas中排序的运用 API :sort_values()
- Pandas中修改列名的运用 API columns
- 先子查询,在分类聚合 求出二级关注着的关注者人数
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用