如何用Python/Pandas获取CSV中销量Top20书籍并显示产品名及排序?
解决方法
你的问题出在value_counts()的用法上——这个函数是用来统计相同销量值出现的次数,而不是按单本书的销量排序筛选。要实现你要的「取销量前20的书籍并包含书名」,可以用下面两种简洁的方式:
方法1:用nlargest直接筛选(推荐)
nlargest可以直接帮你选出指定列数值最大的前N行,同时保留所有需要的列:
import pandas as pd df = pd.read_csv('books.csv') # 剔除销量为空的行(如果数据里有缺失值的话) df = df.dropna(subset=['Sales']) # 取销量前20的书籍,保留书名和销量列,默认就是按销量降序排列 top_20_books = df.nlargest(20, 'Sales')[['Product Name', 'Sales']] print(top_20_books)
方法2:先排序再取前20
如果需要更清晰的排序过程,可以先按销量降序排序,再截取前20行:
import pandas as pd df = pd.read_csv('books.csv') df = df.dropna(subset=['Sales']) # 按销量从高到低排序 sorted_df = df.sort_values(by='Sales', ascending=False) # 取前20行,保留需要的列 top_20_books = sorted_df.head(20)[['Product Name', 'Sales']] print(top_20_books)
两种方法的效果完全一致,你可以根据习惯选择。另外注意:如果你的Sales列是字符串格式(比如带逗号、美元符号),需要先转换成数值类型才能正确排序,比如:
# 处理带$和逗号的销量列(示例) df['Sales'] = df['Sales'].replace('[\$,]', '', regex=True).astype(float)
内容的提问来源于stack exchange,提问作者bryd
相关产品推荐
相关产品推荐

