如何用Pandas DataFrame计算水果汇总收获量的下四分位表现者
Pandas 水果收获数据分析解决方案
首先,pd.read_excel本身就会返回DataFrame,所以你原来的代码可以简化为:
df = pd.read_excel('fruit-harvests.xlsx', sheet_name='Harvests')
当然你原本的写法也没问题,不影响后续操作。
下面是对应需求的分步实现:
1. 按水果分组汇总收获总量
通过groupby按水果名称分组后,对HarvestCount字段求和,得到每个水果的总收获量:
# 分组求和,reset_index将分组索引转为普通列,方便后续操作 df_total = df.groupby('Fruit')['HarvestCount'].sum().reset_index()
2. 按收获量排序
用sort_values对总收获量进行排序,默认是升序(从小到大),如果需要降序可以添加ascending=False参数:
# 按收获量从小到大排序 df_sorted = df_total.sort_values(by='HarvestCount')
3. 筛选底部25%的水果
先计算收获量的25分位数(即底部25%的临界值),再筛选出收获量小于等于该值的水果:
# 计算25分位数阈值 threshold = df_sorted['HarvestCount'].quantile(0.25) # 筛选符合条件的行 bottom_25_fruits = df_sorted[df_sorted['HarvestCount'] <= threshold] # 提取水果名称列表 result = bottom_25_fruits['Fruit'].tolist() print(result) # 预期输出: ['Orange', 'Pineapple']
可选链式写法
如果喜欢更简洁的代码,可以把所有步骤合并成一行:
result = (df.groupby('Fruit')['HarvestCount'].sum() .sort_values() .loc[lambda x: x <= x.quantile(0.25)] .index.tolist())
注意点
- 若数据中存在同一水果的多条记录,
groupby.sum()会自动合并计算该水果的总收获量 quantile(0.25)是基于数据分布计算的临界值,比直接取前N行的方式更准确(尤其当数据量较小时)
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

