如何用Python Pandas提取每个评分短语对应的评分值?
问题:按评分短语分组展示对应所有评分值
我的数据集包含存储浮点数的score列,以及描述评分的字符串列score_phrase。想要用Python/Pandas筛选并展示每个短语对应的所有评分值。目前已实现加载数据、筛选目标列并按评分从低到高排序的代码:
reviews = pd.read_csv("ign.csv") filter_reviews = reviews.loc[:,["score_phrase","score"]] filtered_reviews = filter_reviews.sort_values(by =["score"]) print (filtered_reviews)
解决方案
要实现按评分短语分组,展示每个短语对应的所有评分值,核心是用Pandas的groupby方法对score_phrase分组,再收集每个组内的score值。以下是两种常用实现方式:
方式1:生成分组后的结构化DataFrame
适合需要保存或进一步处理分组结果的场景,同时可按评分高低排序短语:
import pandas as pd # 加载数据并筛选目标列 reviews = pd.read_csv("ign.csv") filter_reviews = reviews.loc[:, ["score_phrase", "score"]] # 按评分短语分组,收集对应所有评分值(去重并排序) grouped_data = filter_reviews.groupby('score_phrase')['score'].apply(lambda x: sorted(x.unique())).reset_index() # 按每个短语对应的最低评分排序,让结果从低分到高分排列 grouped_data['min_score'] = grouped_data['score'].apply(lambda x: x[0]) sorted_grouped = grouped_data.sort_values('min_score').drop('min_score', axis=1) # 打印结果 print(sorted_grouped)
方式2:逐个打印每个短语及其评分
适合需要直观查看每个短语对应评分的场景:
import pandas as pd reviews = pd.read_csv("ign.csv") filter_reviews = reviews.loc[:, ["score_phrase", "score"]] # 分组并处理每个组的评分(去重+排序) grouped = filter_reviews.groupby('score_phrase')['score'].apply(lambda x: sorted(x.unique())) # 按评分最小值排序分组结果 sorted_groups = grouped.sort_values(key=lambda x: x.iloc[0]) # 遍历打印 for phrase, scores in sorted_groups.items(): print(f"评分短语: *{phrase}*") print(f"对应的评分值: {scores}\n")
说明
- 如果不需要去重评分,去掉代码中的
unique()即可 sorted()保证每个短语内的评分按升序排列- 排序分组结果时,用每个短语的最低评分作为依据,让整体结果从低分到高分展示
内容的提问来源于stack exchange,提问作者Kreeation14
相关产品推荐
相关产品推荐

