You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas统计用户蔬菜总消费量并降序排列?

Pandas按用户汇总蔬菜消费量并降序排列解决方案

问题背景

我正在使用Pandas进行数据处理,现有一个包含两列的CSV文件:

  • name:姓名可重复出现
  • food:取值为banana、apple、carrot、celery或potato,同一用户可多次记录同一种食物

表格示例:

namefood
paulcarrot
paulpotato
paulapple
alexbanana
alexcelery
mariepotato
marieapple
paulapple
carlpotato
......
bobbanana

需求:生成降序列表,展示各用户的蔬菜(carrot、potato、celery)总消费量,包含姓名和对应总量,按总量从多到少排序。

当前尝试代码:

import pandas as pd

df = pd.read_csv('foodcounter.csv')

s = df['name'].groupby(df['food']).value_counts()[['carrot','potato','celery']]

print(s.to_string())

当前输出(按食物分类的用户消费量):

foodnamecount
carrotpaul43
alex32
carl13
......
celeryPaul12
alex3
marie1
......
potatopaul33
marie23
alex14

期望输出(按用户汇总蔬菜总量并降序):

namecount
Paul88
alex77
marie66
......
carl16
bob5
john1

解决代码及说明

你需要先筛选蔬菜记录,再按用户分组统计总量,最后降序排序。完整代码如下:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('foodcounter.csv')

# 定义蔬菜类别列表
vegetables = ['carrot', 'potato', 'celery']

# 筛选蔬菜数据 → 按姓名分组统计 → 转换为DataFrame → 降序排序
result = df[df['food'].isin(vegetables)] \
          .groupby('name') \
          .size() \
          .reset_index(name='count') \
          .sort_values(by='count', ascending=False)

# 输出结果(隐藏索引列)
print(result.to_string(index=False))

代码细节解释

  1. 筛选蔬菜记录:df[df['food'].isin(vegetables)] 仅保留食物属于蔬菜列表的行,排除水果类数据。
  2. 分组统计:.groupby('name').size() 按姓名分组,统计每组的行数,即该用户的蔬菜总消费量。
  3. 格式转换:.reset_index(name='count') 将分组后的Series转换为DataFrame,并将统计列命名为count,匹配期望的输出结构。
  4. 降序排序:.sort_values(by='count', ascending=False) 按消费量从高到低排列结果。
  5. 输出优化:print(result.to_string(index=False)) 隐藏默认的索引列,让输出格式与期望完全一致。

内容的提问来源于stack exchange,提问作者stackuser.m46i3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:12:33