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

Python与pandas:如何进行非标准分组操作

解决Pandas多特征分组统计的问题

嘿,我懂你的困扰——其实你要做的就是按水果+颜色+口味的组合来统计数量,用基础的groupby就能轻松实现,可能你之前没试过同时按多列分组~

我直接给你上代码和解释,用你的示例数据来演示:

首先构造你的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'fruit': ['apple', 'apple', 'apple', 'apple', 'apple'],
    'x1': ['red', 'yellow', 'green', 'red', 'red'],
    'x2': ['sweet', 'sweet', 'tart', 'sweet', 'sweet']
})

方法一:groupby + size()(最直观)

这是最标准的多列分组统计写法:

# 同时按fruit、x1、x2三列分组,统计每组的行数
grouped_result = df.groupby(['fruit', 'x1', 'x2']).size().reset_index(name='count')
print(grouped_result)
  • groupby(['fruit', 'x1', 'x2']):把这三个列的组合作为分组依据,比如"apple+red+sweet"就是一个独立分组
  • size():统计每个分组里的记录数量
  • reset_index(name='count'):把分组后的索引(也就是那三个列)转成普通列,同时给统计出来的数量列命名为count

方法二:value_counts()(更简洁)

如果想少写点代码,用value_counts()一步到位:

# 指定要统计的列组合,直接输出频次
count_result = df.value_counts(subset=['fruit', 'x1', 'x2']).reset_index(name='count')
print(count_result)
  • value_counts(subset=...):默认会统计指定列的所有唯一组合出现的次数,结果默认按频次降序排列
  • 同样用reset_index把结果转成规整的DataFrame格式

最终输出结果

两种方法都会得到你想要的统计结果:

fruit      x1     x2  count
0   apple     red  sweet      3
1   apple  yellow  sweet      1
2   apple    green   tart      1

不管之后加入多少其他水果(比如banana、orange),这个逻辑都通用——它会自动按所有水果的特征组合分别统计数量。

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:53:27