Pandas实战:如何找出对应最高点赞数的标题单词数量
解决标题单词数量与最高点赞数对应关系的最优方案
嘿,我来帮你理清楚这个问题~你之前的代码问题出在groupby的逻辑和apply的使用上,咱们一步步来解决:
第一步:高效计算每个标题的单词数量
首先要给每个标题计算单词数,这里强烈推荐用Pandas的向量化字符串方法,比你想用的apply高效得多(尤其是数据量大的时候),而且能处理多空格、首尾空格这类边界情况:
# 新增word_count列,分割任意空白符后取长度 df['word_count'] = df['headline'].str.split().str.len()
这里用str.split()默认分割任意空白字符,比split(' ')更鲁棒,不会因为标题里的多个空格导致单词数计算错误。
第二步:根据需求选择对应实现
需求1:查看每个单词数量对应的最高点赞数
如果想知道“不同单词数的标题分别能达到的最高点赞数”,按单词数分组后取点赞数的最大值,再排序即可:
# 按单词数分组,求每组最高点赞数,按点赞数降序排列 word_count_max_upvotes = df.groupby('word_count')['upvotes'].max().sort_values(ascending=False)
返回的结果是一个Series,索引是单词数量,值是该单词数标题能拿到的最高点赞数,能直观看到哪个长度的标题表现最好。
需求2:直接找到最高点赞标题的单词数量
如果只想知道“获得最高点赞的标题有多少个单词”,直接定位到点赞数最高的行即可:
# 获取点赞数最高的行 top_voted_row = df.loc[df['upvotes'].idxmax()] # 输出结果 print(f"最高点赞数:{top_voted_row['upvotes']},对应标题单词数:{top_voted_row['word_count']}")
为什么你的原代码会出错?
你之前写的df.groupby('upvotes')['headline'].apply(lambda x: len(x.split(' ')))有两个问题:
- 逻辑倒置:你需要先计算每个标题的单词数,再按单词数分组看点赞情况,而不是按点赞数分组去处理标题;
- apply的对象错误:groupby('upvotes')后,每个分组的
headline是同一点赞数下所有标题组成的Series,不是单个字符串,所以调用x.split(' ')会报错——Series没有split方法。
内容的提问来源于stack exchange,提问作者Matt Hough
相关产品推荐
相关产品推荐

